Tema SQL
Subconsulta escalar en WHERE
SELECT anidado que devuelve una sola columna y una fila (o se compara con IN) para decidir si cada fila exterior pasa el filtro. Encapsula un cálculo reutilizable sin CTE.
Descripción
Una subconsulta escalar entre paréntesis puede sustituir un valor literal: por ejemplo comparar precio con el promedio global, o con un máximo por categoría si correlacionas la subconsulta. Si devuelve más de una fila y usas = o <, el motor suele error; usa IN o reescribe con JOIN. Las subconsultas correlacionadas (referencian columnas de la consulta exterior) se ejecutan conceptualmente por fila y pueden ser costosas: el optimizador a veces las convierte en joins semánticamente equivalentes.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
SELECT columnas
FROM tabla
WHERE columna operador ( SELECT una_columna FROM ... );
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- Subconsulta
- Consulta interna entre paréntesis. En forma escalar debe producir como mucho un valor por evaluación; si puede ser vacía, ten en cuenta NULL o usar COALESCE según reglas de negocio.
- AVG / agregados
- Agregados sin GROUP BY en la subconsulta reducen toda la tabla referenciada a un solo valor. La consulta externa compara cada fila contra ese resumen.
Ejemplos
Ejemplo 1
SELECT *
FROM productos
WHERE precio > (
SELECT AVG(precio) FROM productos
);
Ejemplo 2
SELECT nombre
FROM empleados
WHERE departamento_id IN (
SELECT id FROM departamentos WHERE pais = 'ES'
);
Temas relacionados
Enlaces internos para seguir leyendo: SELECT, WHERE, JOIN, GROUP BY y el resto de la referencia SQL.
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.