Saltar al contenido principal

Subconsulta SQL: Guía completa

Descubre cómo dominar las subconsultas SQL para mejorar tus consultas a bases de datos. Conoce las subconsultas correlacionadas, no correlacionadas y recursivas. Aprende sobre el orden de ejecución y cómo combinar las subconsultas SQL con otras funciones SQL.
Actualizado 16 ene 2025  · 8 min de lectura

Las subconsultas SQL son una poderosa herramienta en la gestión de bases de datos, que permite una recuperación de datos más compleja y eficaz. Esta guía te guiará a través de los fundamentos de las subconsultas SQL, ofreciéndote información sobre sus aplicaciones prácticas y técnicas avanzadas. Tanto si eres un principiante como un profesional experimentado, dominar las subconsultas puede mejorar significativamente tus habilidades SQL.

Si eres nuevo en SQL, puedes empezar con nuestro curso SQL Intermedio para construir una base sólida. Además, considero que la Hoja de trucos de SQL Básico, que puedes descargar, es una referencia útil porque contiene todas las funciones SQL más comunes. Por último, quiero decir que las subconsultas son una pregunta de entrevista SQL, así que si te estás preparando para una entrevista, has venido al lugar adecuado para repasarlas.

¿Qué es una subconsulta SQL?

Una subconsulta permite que las consultas SQL sean más modulares al gestionar tareas que, de otro modo, requerirían varias consultas independientes.

Definición y finalidad

Una subconsulta SQL es una consulta anidada dentro de otra consulta SQL, que se utiliza para realizar operaciones que requieren varios pasos o una lógica compleja. La función de las subconsultas en SQL incluye lo siguiente:

  • Filtrar registros basándose en datos de tablas relacionadas.
  • Agregando datos y realizando cálculos dinámicamente.
  • Cruzar datos entre tablas para obtener información específica.
  • Seleccionar filas condicionalmente sin necesidad de uniones explícitas o lógica de código externa.

Parece mucho, pero tendrá sentido a medida que exploremos estas cosas en el tutorial.

Tipos de subconsultas

Quizá te sorprenda saber que existen distintos tipos de subconsultas. Los distintos tipos se agrupan en función de las distintas necesidades de recuperación de datos y se adaptan a ellas. Puedes elegir entre las siguientes subconsultas en función de la operación que quieras realizar:

Subconsultas escalares

Las subconsultas escalares devuelven un único valor, como una fila y una columna. Suelen utilizarse cuando se espera un único valor, como en cálculos, comparaciones o asignaciones en las cláusulas SELECT o WHERE.

En el ejemplo siguiente, la subconsulta escalar (SELECT AVG(salary) FROM employees) devuelve un único valor, el salario medio, y lo compara con el salario de cada empleado.

-- Example of Scalar Subquery 
-- Compares each salary to the average salary
SELECT employee_name, 
       salary,
       (SELECT AVG(salary) FROM employees) AS average_salary 
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

Subconsultas de columna

Las subconsultas de columna devuelven una sola columna pero varias filas. Estas subconsultas se utilizan a menudo con operadores como IN o ANY, donde la consulta externa compara valores de varias filas.

Por ejemplo, la subconsulta siguiente devuelve una lista de identificadores de departamento para los departamentos situados en Nueva York, que la consulta principal utiliza después para filtrar a los empleados de esos departamentos.

-- Example of Column Subquery 
-- Filters based on departments in New York
SELECT employee_name
FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York');

Subconsultas de fila

Las subconsultas de fila devuelven una única fila que contiene varias columnas. Estas subconsultas se suelen utilizar con operadores de comparación que pueden comparar una fila de datos, como los operadores = o IN, cuando se esperan varios valores.

La siguiente subconsulta recupera el departamento y el cargo de un directivo, y la consulta externa encuentra los empleados con valores coincidentes.

-- Example of Row Subquery 
-- Matches department and job title with a specific manager
SELECT employee_name
FROM employees
WHERE (department_id, job_title) = (SELECT department_id, job_title FROM managers WHERE manager_id = 1);

Subconsultas de tablas (tablas derivadas)

Las subconsultas de tabla, o tablas derivadas, devuelven una tabla completa de varias filas y columnas. Se suelen utilizar en la cláusula FROM como tabla temporal dentro de una consulta.

Por ejemplo, la subconsulta siguiente crea una tabla derivada de salarios medios por departamento, que luego se utiliza en la consulta externa para encontrar departamentos con un salario medio superior a un umbral especificado.

-- Example of Table Subquery 
-- Uses derived table for average department salary comparison
SELECT dept_avg.department_id, dept_avg.avg_salary
FROM 
    (SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id) AS dept_avg
WHERE dept_avg.avg_salary > 50000;

Comprender las subconsultas SQL

En los ejemplos anteriores, hemos visto que una subconsulta se encierra entre paréntesis. Exploremos ahora la mecánica de una subconsulta, incluyendo su sintaxis y orden de ejecución.

Sintaxis y estructura

La sintaxis de una subconsulta varía en función de dónde se utilice en la sentencia SQL principal, como dentro de las cláusulas SELECT, FROM o WHERE. Las subconsultas suelen ir entre paréntesis ( ), lo que indica que se trata de una consulta independiente. 

El siguiente ejemplo muestra una subconsulta dentro de una cláusula WHERE, que nos permite filtrar datos en la consulta principal basándonos en los resultados de una consulta anidada. 

-- Selects the main column to retrieve from the main table to query
SELECT column_name
FROM table_name
-- Applies a condition to filter rows based on the subquery result
WHERE column_name operator 
      -- Subquery retrieves data for comparison in the WHERE clause
      (SELECT column_name FROM table_name WHERE condition);  

Orden de ejecución

El orden de ejecución de las subconsultas depende de si están correlacionadas o no.

Subconsultas no correlacionadas

Las subconsultas no correlacionadas son independientes de la consulta externa y se ejecutan primero. El resultado de la subconsulta se pasa a la consulta externa. Las subconsultas no correlacionadas se suelen utilizar para cálculos y filtros escalares o a nivel de columna.

La consulta siguiente sigue el orden de ejecución:

  • La subconsulta (SELECT AVG(salary) FROM employees) se ejecuta primero y calcula el salario medio.

  • La consulta externa recupera entonces los empleados cuyo salario es superior a esta media.

-- Retrieves names of employees with above-average salary
SELECT employee_name  
FROM employees
-- Subquery: calculates average salary across all employees
WHERE salary > (SELECT AVG(salary) FROM employees);  

Te recomiendo que sigas el curso Introducción a SQL Server de DataCamp para aprender más sobre la agrupación y agregación de datos, y la unión de tablas.

Subconsultas correlacionadas

Las subconsultas correlacionadas dependen de la consulta externa para algunos de sus datos, por lo que se reevalúan para cada fila procesada por la consulta externa. 

La siguiente consulta se ejecuta en este orden:

  • Para cada fila de employees (alias e1), la subconsulta (SELECT AVG(e2.salary) FROM employees e2 WHERE e2.department_id = e1.department_id) calcula el salario medio de ese departamento concreto.

  • A continuación, la consulta externa compara el salario de cada empleado con el salario medio del departamento e incluye sólo a los que ganan más.

-- Retrieves names of employees with above-average salary in their department
SELECT e1.employee_name  
FROM employees e1
 -- Subquery: calculates average salary for each department
WHERE e1.salary > (SELECT AVG(e2.salary) FROM employees e2 WHERE e2.department_id = e1.department_id); 

Aplicaciones de la subconsulta SQL

Las subconsultas SQL son importantes para la recuperación y transformación de datos, ya que te permiten escribir consultas complejas y manejar tareas avanzadas de análisis de datos. Las siguientes son aplicaciones reales de las subconsultas en la gestión de bases de datos.

Filtrar datos

Las subconsultas son útiles para filtrar datos basándose en condiciones dinámicas, especialmente cuando el filtrado requiere comparar valores de varias tablas o realizar cálculos.

La siguiente subconsulta recupera el category_id de "Producto A", y la consulta principal encuentra todos los productos de esa categoría.

-- Retrieves names of products in the same category as 'Product A'
SELECT product_name  
FROM products
 -- Subquery: finds category ID of 'Product A'
WHERE category_id = (SELECT category_id FROM products WHERE product_name = 'Product A'); 

Agregación de datos

Las subconsultas también se utilizan para la agregación de datos, especialmente cuando se generan estadísticas resumidas o perspectivas para informes y análisis. La subconsulta (SELECT department_id, AVG(sales) AS avg_sales FROM sales GROUP BY department_id) calcula las ventas medias por departamento. La consulta externa filtra entonces los departamentos con una media de ventas superior a 50.000. 

-- Retrieves department IDs and their average sales
-- Filters for departments with average sales over 50,000
SELECT department_id, avg_sales  
FROM (SELECT department_id, AVG(sales) AS avg_sales FROM sales GROUP BY department_id) AS dept_sales  -- Subquery: calculates average sales per department
WHERE avg_sales > 50000;  

Consideraciones sobre el rendimiento y buenas prácticas

Aunque las subconsultas son potentes a la hora de escribir consultas complejas, pueden afectar al rendimiento, especialmente cuando se trabaja con grandes conjuntos de datos. Es importante tener en cuenta los escollos habituales y las mejores prácticas para mejorar el rendimiento.

Optimizar el rendimiento de las subconsultas

Optimizar el rendimiento de las subconsultas garantiza una mejora del tiempo de ejecución de la consulta y de la capacidad de respuesta de la base de datos. A continuación se indican formas de optimizar la subconsulta.

  • Índice Columnas relevantes: Para acelerar la recuperación de datos, asegúrate de que las columnas utilizadas en las cláusulas WHERE y JOIN y en las operaciones de comparación estén indexadas.

  • Limita el Uso de Subconsultas Correlacionadas: Siempre que sea posible, utiliza operaciones JOIN o CTE en lugar de subconsultas correlacionadas, ya que a menudo pueden procesar los datos más rápidamente utilizando operaciones de conjunto en lugar de procesar fila por fila.

  • Limitar el número de columnas en las subconsultas: Selecciona sólo las columnas que necesites en las subconsultas para minimizar la recuperación de datos, reducir el uso de memoria y permitir que la base de datos optimice la ejecución.

  • Utiliza EXISTE en lugar de EN: Si una subconsulta devuelve un conjunto de datos grande, utilizar EXISTS en lugar de IN puede mejorar el rendimiento. El operador EXISTS detendrá el procesamiento de la consulta cuando encuentre una fila coincidente, mientras que el operador IN seguirá evaluando todo el resultado de la subconsulta.

Evitar errores comunes

Si escribes mal las subconsultas, puedes tener problemas al ejecutarlas. Veamos cómo evitar estos escollos.

  • Evita Subconsultas Correlacionadas Innecesarias: Las subconsultas correlacionadas consumen muchos recursos, así que evita utilizarlas cuando el resultado pueda obtenerse con una subconsulta no correlacionada o una unión.

  • Ten cuidado con los valores NULL en las subconsultas: los valores NULL pueden dar lugar a resultados inesperados, especialmente en las subconsultas que utilizan operadores de comparación como IN o =. Para evitar errores, considera la posibilidad de utilizar COALESCE para tratar los nulos o asegurarte de que las columnas no son anulables si se utilizan para comparaciones.

  • Evita utilizar SELECT * en las subconsultas: Utilizar SELECT * puede resultar ineficaz, ya que recupera todas las columnas, aunque no las necesites. Esto aumenta el uso de memoria y puede ralentizar la ejecución de las consultas, especialmente con grandes conjuntos de datos.

  • Utiliza alias significativos: Nombra claramente tus tablas y subconsultas para mejorar la legibilidad.

Prueba nuestro itinerario profesional de Desarrollador de SQL Server, que te dotará de los conocimientos necesarios para escribir, solucionar problemas y optimizar tus consultas con SQL Server. 

Más técnicas avanzadas de subconsulta SQL

Aunque las subconsultas ofrecen una forma eficaz de escribir consultas complejas, existen métodos avanzados para manejar datos jerárquicos. Examinemos las técnicas y estrategias avanzadas para aplicar subconsultas SQL.

Subconsultas recursivas

Las subconsultas recursivas (también conocidas como expresiones comunes de tabla recursivas o CTE) te permiten recuperar datos jerárquicos, como estructuras organizativas, categorías de productos o relaciones basadas en gráficos, donde cada elemento de los datos está vinculado a otro.

Supón que tienes una tabla employees con employee_id, manager_id, y employee_name. Quieres recuperar la jerarquía de los empleados que dependen de un directivo concreto.

WITH RECURSIVE EmployeeHierarchy AS (
    -- Anchor Query: Start with the specified manager
    SELECT employee_id, manager_id, employee_name, 1 AS level
    FROM employees
 -- Assuming the top-level manager has NULL as manager_id
    WHERE manager_id IS NULL 
    
    UNION ALL
    
    -- Recursive Query: Find employees who report to those in the previous level
    SELECT e.employee_id, e.manager_id, e.employee_name, eh.level + 1
    FROM employees e
    INNER JOIN EmployeeHierarchy eh ON e.manager_id = eh.employee_id
)
SELECT * FROM EmployeeHierarchy;

En la consulta anterior:

  • Lo que yo llamo Consulta Ancla selecciona el gestor de nivel superior (donde manager_id es NULL).

  • La Consulta Recursiva une employees con el propio CTE (EmployeeHierarchy), encontrando empleados que dependen de cada empleado recuperado previamente.

  • La recursión continúa hasta que no hay más empleados que informen a los encontrados.

Combinar subconsultas con otras funciones SQL

Puedes integrar las subconsultas con otras funciones SQL, como las funciones de ventana, las sentencias CASE y las funciones de agrupación. Estas combinaciones permiten una manipulación avanzada de los datos y la elaboración de informes más completos.

Combinar subconsultas con funciones de ventana

Las subconsultas pueden utilizarse para refinar el conjunto de datos sobre el que actúan las funciones de ventana, lo que las hace útiles para clasificaciones, totales acumulados y medias móviles. Supón que quieres clasificar los productos por ventas dentro de cada región. Puedes utilizar una subconsulta para seleccionar los datos relevantes y luego aplicar una función de ventana para clasificarlos.

 -- Ranks products by sales within each region
SELECT region, product_id, sales, 
       RANK() OVER (PARTITION BY region ORDER BY sales DESC) AS sales_rank 
-- Subquery: calculates total sales per product in each region
FROM (SELECT region, product_id, SUM(sales) AS sales  
      FROM sales_data
      GROUP BY region, product_id) AS regional_sales;

Utilizar subconsultas con sentencias CASE

Combinar subconsultas con sentencias CASE puede ayudarte a aplicar condiciones complejas basadas en cálculos dinámicos. La siguiente consulta clasifica los productos en "Alto", "Medio" o "Bajo" rendimiento en función de sus ventas en relación con las ventas medias de su categoría.

 -- Categorize above-average sales, average sales, and below-average sales
SELECT product_id, category_id, sales,
       CASE 
           WHEN sales > (SELECT AVG(sales) FROM products WHERE category_id = p.category_id) THEN 'High' 
           WHEN sales = (SELECT AVG(sales) FROM products WHERE category_id = p.category_id) THEN 'Medium' 
           ELSE 'Low'
       END AS performance
FROM products AS p;

Subconsultas con funciones de agregación para la agregación condicional

También puedes calcular agregados condicionales utilizando subconsultas dentro de las funciones de agregado. Supón que quieres calcular los ingresos totales generados sólo por los clientes activos. En el ejemplo siguiente, la subconsulta recupera todos los clientes activos. A continuación, la consulta principal filtra los pedidos para incluir sólo los realizados por clientes activos, calculando los ingresos totales de este grupo.

 -- Calculates total revenue from active customers
SELECT SUM(order_total) AS active_customer_revenue 
FROM orders
  -- Subquery: retrieves IDs of active customers
WHERE customer_id IN (
    SELECT customer_id
    FROM customers
    WHERE status = 'Active'
);

Cuando se utilizan subconsultas SQL

Las subconsultas SQL ofrecen aplicaciones versátiles en el mundo real para el análisis de datos, por eso se utilizan con tanta frecuencia. Las siguientes son algunas aplicaciones específicas del sector o matemáticas de las subconsultas SQL. Para llegar a estas ideas, intenté pensar en trabajos de análisis o ingeniería de datos que requieren múltiples pasos, que es, en mi opinión, donde las subconsultas son realmente útiles.

Ejemplos específicos del sector

Las subconsultas pueden ofrecer soluciones útiles en los sectores financiero, sanitario y minorista. Aquí tienes algunas ideas:

  • Evaluación de riesgos para la aprobación de préstamos (Finanzas): Me imagino a los bancos haciendo malabarismos con métricas como los ratios deuda-ingresos y las puntuaciones de crédito. Al anidar estas métricas en subconsultas, los analistas pueden entender mejor las métricas financieras complicadas. Tal vez, una subconsulta pueda calcular el importe medio del préstamo para los clientes dentro de determinados tramos de ingresos.

  • Identificar patrones en los diagnósticos de los pacientes (Sanidad): En sanidad, gestionar los datos de los pacientes puede ser un gran trabajo. Las subconsultas podrían ayudar a romper esta complejidad. Me imagino utilizando subconsultas para hacer un seguimiento de las frecuencias de diagnóstico en diferentes grupos de edad o factores de riesgo.

  • Optimizar la colocación de productos basándose en el historial de compras (comercio minorista): A los minoristas les encanta comprender las pautas de compra. Las subconsultas pueden mostrar datos de compra anidados para identificar qué productos suelen comprarse juntos. Esto podría ayudar a colocar estratégicamente los artículos complementarios e impulsar las ventas.

Conexiones matemáticas

Las subconsultas también se utilizan para identificar patrones de datos y tendencias en conexiones matemáticas y lógicas. A continuación se exponen algunas situaciones en las que se aplican las subconsultas en matemáticas.

  • Medias móviles para el análisis de series temporales: Al analizar tendencias a lo largo del tiempo, las subconsultas simplifican el cálculo de medias móviles. Veo que definen ventanas temporales específicas dentro de consultas anidadas, lo que facilita la suavización de los datos y la detección de tendencias.

  • Detección de valores atípicos mediante desviaciones típicas: Detectar valores atípicos es importante para muchas cosas, como la detección del fraude. Las subconsultas facilitan el cálculo de métricas, como las desviaciones típicas, dentro de consultas anidadas.

  • Utilización de conceptos de la Teoría de Conjuntos: Me parece interesante cómo las subconsultas reflejan operaciones de la teoría de conjuntos como UNION y INTERSECT. Esta capacidad es perfecta para tareas como el análisis de la retención de clientes, donde la comprensión de los solapamientos y diferencias entre grupos de clientes puede impulsar estrategias de marketing más inteligentes.

Conclusión

Dominar las subconsultas SQL puede mejorar significativamente tu capacidad para gestionar y analizar datos con eficacia. Si comprendes su estructura, aplicaciones y mejores prácticas, podrás optimizar tus consultas SQL para obtener un mejor rendimiento. Además, quiero decir que dominar las subconsultas facilita la escritura de SQL, así que merece la pena aprenderlo.

Si estás interesado en convertirte en un analista de datos competente, consulta nuestro itinerario profesional de Analista de Datos Asociado en SQL para aprender las habilidades necesarias. El curso Informes en SQL también es adecuado si quieres aprender a crear cuadros de mando profesionales utilizando SQL. Por último, recomiendo obtener la Certificación de Asociado SQL para demostrar tu dominio del uso de SQL para el análisis de datos y destacar entre los demás profesionales de datos.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Creo artículos que simplifican la ciencia de los datos y la analítica, haciéndolos fáciles de entender y accesibles.

Preguntas frecuentes sobre subconsultas SQL

¿Qué es una subconsulta SQL?

Una subconsulta SQL es una consulta anidada dentro de otra consulta SQL, que se utiliza para realizar operaciones que requieren varios pasos o una lógica compleja.

¿Cómo se utiliza una subconsulta en SQL?

Las subconsultas se utilizan dentro de las sentencias SQL para filtrar datos, realizar cálculos o recuperar información específica basándose en condiciones complejas.

¿Cuáles son los tipos de subconsultas en SQL?

Las subconsultas SQL pueden clasificarse en subconsultas escalares, de columna, de fila y de tabla, cada una de las cuales sirve para fines distintos en la recuperación de datos.

¿Qué diferencia hay entre una subconsulta y un join?

Una subconsulta es una consulta anidada que se utiliza para operaciones complejas, mientras que una unión combina filas de dos o más tablas basándose en columnas relacionadas.

¿Cómo pueden las subconsultas mejorar el rendimiento de las consultas SQL?

Las subconsultas pueden agilizar las consultas complejas dividiéndolas en partes más pequeñas y manejables, lo que puede mejorar el rendimiento si se utilizan correctamente.

Temas

Aprende SQL con DataCamp

curso

Introduction to SQL

2 hr
976.2K
Learn how to create and query relational databases using SQL in just two hours.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

tutorial

Cómo utilizar un alias SQL para simplificar tus consultas

Explora cómo el uso de un alias SQL simplifica tanto los nombres de las columnas como los de las tablas. Aprende por qué utilizar un alias SQL es clave para mejorar la legibilidad y gestionar uniones complejas.
Allan Ouko's photo

Allan Ouko

9 min

tutorial

Ejemplos y tutoriales de consultas SQL

Si quiere iniciarse en SQL, nosotros le ayudamos. En este tutorial de SQL, le presentaremos las consultas SQL, una potente herramienta que nos permite trabajar con los datos almacenados en una base de datos. Verá cómo escribir consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

21 min

tutorial

Seleccionar varias columnas en SQL

Aprende a seleccionar fácilmente varias columnas de una tabla de base de datos en SQL, o a seleccionar todas las columnas de una tabla en una simple consulta.
DataCamp Team's photo

DataCamp Team

3 min

tutorial

Cómo utilizar GROUP BY y HAVING en SQL

Una guía intuitiva para descubrir los dos comandos SQL más populares para agregar filas de tu conjunto de datos
Eugenia Anello's photo

Eugenia Anello

6 min

tutorial

Introducción a los disparadores SQL: Guía para desarrolladores

Aprende a utilizar los disparadores SQL para automatizar tareas, mantener la integridad de los datos y mejorar el rendimiento de la base de datos. Prueba ejemplos prácticos como los comandos CREATE, ALTER y DROP en MySQL y Oracle.
Oluseye Jeremiah's photo

Oluseye Jeremiah

13 min

tutorial

Tutorial sobre cómo ejecutar consultas SQL en Python y R

Aprenda formas fáciles y eficaces de ejecutar consultas SQL en Python y R para el análisis de datos y la gestión de bases de datos.
Abid Ali Awan's photo

Abid Ali Awan

13 min

Ver másVer más