Módulo 5 · Consultas avanzadas

Resuelve preguntas con subconsultas

Usa el resultado de una consulta dentro de otra para dividir problemas complejos.

24 minNivel IntermedioAntes necesitas: Filtros, agregaciones y JOIN

0 de 45 lecciones

Al terminar, podrás

  • Distinguir una subconsulta escalar de una subconsulta que devuelve varias filas.
  • Probar la consulta interior antes de incorporarla a la exterior.
  • Usar EXISTS cuando solo importa saber si existe una coincidencia.

Recupera lo aprendido: ¿AVG(precio) sin GROUP BY devuelve un valor por producto o un único promedio?

La idea clave

Una subconsulta es un SELECT dentro de otra sentencia. El contexto exterior determina qué forma necesita: un único valor para una comparación escalar, una columna para IN o una mera comprobación de existencia para EXISTS.

Método seguro: si la subconsulta es independiente, ejecútala primero y observa cuántas filas y columnas devuelve. Si usa una columna exterior, prueba la relación con un identificador concreto: esa subconsulta depende de la fila exterior y no puede ejecutarse aislada sin adaptar la referencia.

La sintaxis básica

Tres formas frecuentes
-- Un valor
WHERE precio > (SELECT AVG(precio) FROM productos)

-- Una lista
WHERE cliente_id IN (SELECT id FROM clientes WHERE activo = 1)

-- Existencia
WHERE EXISTS (SELECT 1 FROM pedidos WHERE ...);
Elige la forma según lo que necesita la consulta exterior
La consulta exterior necesita…Forma útilPregunta de control
un valorsubconsulta escalar¿devuelve una columna y como máximo una fila?
una lista de valoresIN¿devuelve una sola columna?
saber si existe alguna filaEXISTS¿basta con encontrar una coincidencia?

Ejemplo paso a paso

Precios relevantes de la tabla productos
nombreprecio
Monitor 24179,00
Monitor 27249,00
Portátil Pro999,00

El precio medio de los nueve productos es aproximadamente 191,81. La consulta exterior conservará únicamente los precios superiores a ese valor.

SQL
SELECT nombre, precio
FROM productos
WHERE precio > (SELECT AVG(precio) FROM productos)
ORDER BY precio;
Resultado esperado
nombreprecio
Monitor 27249,00
Portátil Pro999,00

Cómo funciona

  1. La consulta interior devuelve una fila y una columna: el promedio.
  2. Ese valor se compara con el precio de cada producto.
  3. El ORDER BY pertenece a la consulta exterior y ordena las filas finales.
Comprueba tu comprensión

¿Qué debe devolver una subconsulta usada con precio > (...)?

Un error habitual

Usar una subconsulta no escalar como si fuera un valor

Consulta problemática
WHERE precio > (SELECT precio FROM productos);

La consulta interior puede devolver muchas filas. PostgreSQL y otros motores producen un error en un contexto escalar. SQLite toma la primera fila, un comportamiento específico que no conviene usar como SQL portable. Agrega, filtra o utiliza IN/EXISTS según la intención.

Practica con datos

Laboratorio SQL

Resuelve la consulta

Pendiente

Escribe una consulta que devuelva id y total de pedidos cuyo total sea superior a la media de todos los pedidos.

Resultado esperado: 4 filas con id, total. El orden de las filas no importa.

Ver tablas y datos

Cargando la estructura del ejercicio…

La consulta usa datos ficticios y se ejecuta solo en este navegador.

Puente hacia EXISTS: una subconsulta puede usar un valor de la fila exterior. En ese caso se evalúa la pregunta “¿existe al menos una fila relacionada con este producto/cliente?”. Esa relación entre la consulta interior y la fila exterior se llama correlación. En el ejemplo con EXISTS, d.producto_id = pr.id es precisamente ese enlace.

Fuentes técnicas consultadas

Las fuentes distinguen subconsultas escalares, expresiones de existencia y subconsultas correlacionadas.

Comprueba si puedes explicarlo

¿Qué ocurre si una subconsulta escalar no devuelve ninguna fila?

Ver respuesta razonada

Su valor es NULL. Una comparación como precio > (subconsulta vacía) no resulta verdadera. Si la pregunta solo es si hay coincidencias, utiliza EXISTS o NOT EXISTS.

Responde antes de abrir la explicación. Si necesitaste ayuda, cierra la respuesta y vuelve a explicarlo con tus palabras antes de dar la lección por aprendida.

Qué debes recordar

  • Comprueba siempre la forma del resultado interior.
  • Elige IN para comparar con una lista y EXISTS para comprobar presencia.
  • No dependas del tratamiento particular de SQLite cuando una subconsulta escalar devuelve varias filas.

A continuación: Continúa con Organiza consultas por etapas con CTE.

Conceptos relacionados