Escalares, IN, EXISTS, correlacionadas y tablas derivadas.
0 / 7 retos resueltos📘 SQL COMANDOS · subquery en SELECT, FROM y WHERE
Al terminar esta práctica podrás…
Usar una subconsulta que devuelve un valor (escalar) para comparar.
Filtrar con IN / NOT IN y EXISTS / NOT EXISTS, y conocer la trampa de NOT IN con NULL.
Escribir subconsultas correlacionadas (dependen de la fila externa).
Usar subconsultas en el SELECT y en el FROM (tablas derivadas).
Una subconsulta es un SELECT dentro de otra sentencia, entre paréntesis. Sirve para
responder preguntas en dos pasos: «¿quién gana más que el promedio?» → primero calcula el promedio y luego compara.
Escalar: devuelve un único valor; se compara con =, >, <…
De lista: devuelve una columna; se usa con IN / NOT IN.
EXISTS: pregunta si la subconsulta devuelve al menos una fila.
Correlacionada: usa columnas de la consulta externa y se evalúa por cada fila.
Tabla derivada: una subconsulta en el FROM, con alias, que se consulta como una tabla.
Nota de motor: Oracle, MySQL y PostgreSQL aceptan > ANY (…) y > ALL (…); SQLite no.
Su equivalente universal es comparar con MIN o MAX: > ALL (…) ≡ > (SELECT MAX(…)).
Sintaxis
SELECT …
FROM t
WHERE col > (SELECT AVG(col) FROM t)
AND col2 IN (SELECT … FROM t2 WHERE …)
AND EXISTS (SELECT 1 FROM t3 WHERE t3.fk = t.pk);
Escalar
WHERE salary > (SELECT AVG(salary) FROM employees)
IN
Pertenece a la lista que devuelve la subconsulta.
NOT IN + NULL
Si la lista contiene un NULL, NOT IN no devuelve nada.
EXISTS
Verdadero si la subconsulta devuelve alguna fila. Seguro frente a NULL.
Correlacionada
La interna usa la fila externa: WHERE e2.department_id = e.department_id.
Derivada (FROM)
FROM (SELECT …) AS t: un resultado intermedio con nombre.
Oracle / MySQL / PostgreSQL
salary > ALL (SELECT salary FROM … )
Equivalente universal
salary > (SELECT MAX(salary) FROM … )
1 · Ejemplos guiados · ejecuta y modifica cada bloque
01Subconsulta escalar
Quién gana más que el promedio de la empresa.
sql-subconsultas.sql
Presiona «ejecutar» para ver el resultado.
02IN con una lista calculada
Empleados que trabajan en departamentos ubicados en Estados Unidos.
sql-subconsultas.sql
Presiona «ejecutar» para ver el resultado.
03La trampa de NOT IN con NULL
¿Quiénes no son jefes de nadie? La primera consulta devuelve 0 filas porque la lista de manager_id contiene un NULL (el presidente). La segunda filtra el NULL y funciona.
sql-subconsultas.sql
Presiona «ejecutar» para ver el resultado.
04EXISTS / NOT EXISTS
Empleados que tuvieron un cargo anterior (aparecen en job_history).
sql-subconsultas.sql
Presiona «ejecutar» para ver el resultado.
05Subconsulta correlacionada
Quién gana más que el promedio de su propio departamento: la interna se recalcula por cada fila externa.
sql-subconsultas.sql
Presiona «ejecutar» para ver el resultado.
06Subconsulta en el SELECT
Cada fila muestra su salario junto al promedio general y la diferencia con él.
sql-subconsultas.sql
Presiona «ejecutar» para ver el resultado.
07Tabla derivada en el FROM
Un resumen por departamento se consulta como si fuera una tabla (necesita alias).
sql-subconsultas.sql
Presiona «ejecutar» para ver el resultado.
⚠ Errores frecuentes
Usar = con una subconsulta que devuelve varias filas. Si puede devolver más de una, usa IN.
NOT IN con una subconsulta que puede devolver NULL: no devuelve nada. Usa NOT EXISTS o filtra IS NOT NULL.
Olvidar el alias de una tabla derivada (FROM (SELECT …) AS t): varios motores lo exigen.
Usar ANY / ALL en SQLite: no existen; reemplázalos por MIN/MAX.
2 · Retos con corrección automática
Escribe tu solución y pulsa comprobar (Ctrl + Enter). Tu consulta y la solución se ejecutan
en bases limpias y se comparan los resultados: no importan los nombres de las columnas, sí los datos (y el
orden, cuando el reto lo pide). Si te atascas, usa la pista o mira el resultado esperado.
3 · Preguntas tipo solemne
1. ¿Qué pasa con WHERE id NOT IN (SELECT jefe_id FROM t) si algún jefe_id es NULL?
Comparar con NULL da «desconocido»; la condición NOT IN nunca resulta verdadera.
2. En SQLite no existe salary > ALL (SELECT salary FROM … ). ¿Cuál es su equivalente?
Ser mayor que todos equivale a ser mayor que el máximo.
3. ¿Qué caracteriza a una subconsulta correlacionada?
Depende de la fila externa y se evalúa por cada una de ellas.