CTE VS SUBCONSULTAS EN MYSQL: ESCRIBIR CONSULTAS LEGIBLES

Subconsultas Anidadas

SELECT * 
FROM (
SELECT * 
FROM (
SELECT id 
FROM tabla1 
WHERE ...
) AS sub1
WHERE ...
) AS sub2
WHERE ...

Problemas

  • Consultas difíciles de leer y entender
  • Depuración compleja
  • Código tipo “espagueti”
  • Mantenimiento infernal

CTE (WITH Clause)

MySQL soporta Common Table Expressions, o CTE, desde la versión 8.0 y es una de las mejores mejoras para escribir consultas legibles:
WITH CTE_Paso1 AS (
SELECT id 
FROM tabla1 
WHERE condicion = 'algo'
),
CTE_Paso2 AS (
SELECT * 
FROM tabla2 
WHERE id IN (SELECT id FROM CTE_Paso1)
)
SELECT * 
FROM CTE_Paso2
WHERE ...

Ventajas de usar CTE en MySQL

  • Legible: Se lee de arriba hacia abajo
  • Modular: Se divide la lógica en pasos claros
  • Reutilizable: Se puede referenciar la misma CTE varias veces
  • Fácil de depurar: Se puede hacer "SELECT *" de cada CTE por separado
  • Mejor mantenimiento: Ideal para consultas complejas como reportes, analíticas, etc.
Siempre que se tenga más de dos niveles de subconsultas, considerar refactorizarla con CTE