SUBCONSULTAS EN MYSQL: MÁS PODER Y CLARIDAD EN LAS CONSULTAS

Las subconsultas, también conocidas como subqueries o consultas anidadas, son una de las herramientas más útiles de SQL. En MySQL, una subconsulta es simplemente una consulta "SELECT" colocada dentro de otra consulta. Esto te permite filtrar, calcular o transformar datos de forma más flexible y legible.
Ejemplo básico:

SELECT ...
FROM ...
WHERE columna IN (
SELECT ...
FROM ...
WHERE ...
);

¿Dónde se pueden utilizar las subconsultas en MySQL?

Las subconsultas pueden aparecer en varias cláusulas:
Cláusula Uso principal
"WHERE" Filtrar filas según un resultado
"FROM" Usar el resultado como tabla derivada
"SELECT" Calcular valores por fila
"HAVING" Filtrar grupos después de un GROUP BY
"IN / EXISTS" Comparar conjuntos de valores

¿Cómo funcionan?

El proceso se divide en dos pasos claros:
  1. Subconsulta interna: Se ejecuta primero y genera un conjunto de resultados, una o varias filas/columnas..
  2. Consulta externa: Utiliza ese resultado para filtrar, comparar o calcular y devolver el resultado final.
Nota importante: En las subconsultas correlacionadas, la subconsulta interna depende de cada fila de la consulta externa, por lo que se evalúa repetidamente, una vez por cada fila procesada.

Tipos de subconsultas en MySQL

Subconsulta no correlacionada

  • No depende de la consulta externa
  • Se ejecuta una sola vez.
  • Su resultado se reutiliza en la consulta principal.
Ejemplo:

SELECT nombre, salario
FROM empleados
WHERE departamento_id IN (
SELECT id
FROM departamentos
WHERE ubicacion = 'Madrid'
);

Subconsulta correlacionada

  • Depende de valores de la consulta externa.
  • Se evalúa para cada fila de la consulta principal.
Ejemplo:

SELECT e.nombre, e.salario
FROM empleados e
WHERE e.salario > (
SELECT AVG(salario)
FROM empleados
WHERE departamento_id = e.departamento_id
);

Buenas prácticas en MySQL

  • Usar subconsultas cuando mejoren la claridad de la lógica de negocio.
  • Usar "JOIN", "CTEs" o funciones de ventana cuando ofrezcan mejor rendimiento o legibilidad.
  • Revisar siempre el plan de ejecución con "EXPLAIN", porque lo que funciona no siempre es lo más eficiente.
  • Mantén las subconsultas simples y bien estructuradas. Evita anidar demasiados niveles.

Consejos de rendimiento específicos para MySQL

  • Las subconsultas correlacionadas suelen ser más lentas porque se ejecutan muchas veces.
  • En versiones modernas de MySQL, el optimizador es bastante bueno con subconsultas, pero los "JOIN" o "CTEs" suelen seguir siendo más eficientes en muchos casos.
  • Usar "EXISTS" en lugar de "IN" cuando solo se necesite comprobar existencia, especialmente con grandes volúmenes de datos.
  • Evitar subconsultas en el "SELECT" si se pueden resolver con un JOIN.

Conclusión

No se trata de escribir más consultas, sino de escribir mejores consultas. Las subconsultas te dan gran flexibilidad. Usarlas con criterio te da mejores resultados: código más legible, lógica más clara y, cuando se aplican correctamente, un rendimiento aceptable.
En MySQL, dominar las subconsultas, y saber cuándo reemplazarlas por otras técnicas), es una habilidad clave para cualquier desarrollador o administrador de bases de datos.