0Pricing
SQL Interview Prep · Lección

Subconsultas escalares en SELECT y WHERE

Use subconsultas que devuelven un único valor y conozca el error que se produce si devuelven más de una fila

Subconsultas escalares en SELECT y WHERE es una lección gratuita de SQL Interview Prep en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Interview Prep incluye 4 lecciones en total.

Qué significa «subconsulta escalar» para un entrevistador

Una subconsulta escalar es una consulta que devuelve exactamente una fila y una columna: un único valor. Como se resuelve en un solo valor, SQL permite colocarla prácticamente en cualquier lugar donde podría ir un literal: en SELECT, WHERE, HAVING e incluso ORDER BY.

  • Los entrevistadores comprueban si conoce la regla de una fila y una columna.
  • La trampa clásica: una subconsulta que accidentalmente devuelve más de una fila.

Si puede expresar esa definición con claridad, ya habrá superado el primer punto de control.

Una subconsulta escalar en la lista SELECT

Incluir una subconsulta escalar en la lista SELECT permite añadir un único valor calculado a cada fila de salida. Aquí mostramos cada empleado junto a la media salarial de toda la empresa.

La subconsulta (SELECT AVG(salary) FROM employees) se ejecuta y reduce toda la tabla a un número, que después se repite en cada fila.

SELECT
  name,
  salary,
  (SELECT AVG(salary) FROM employees) AS company_avg
FROM employees;

Una subconsulta escalar en WHERE

El mismo valor único puede controlar un filtro. Una pregunta muy habitual en entrevistas es encuentre a todas las personas que ganan más que la media de la empresa.

La subconsulta calcula la media una vez y después cada fila de la consulta externa se compara con ella. Esto no es una subconsulta correlacionada: la consulta interna no depende de la fila externa, por lo que se ejecuta una sola vez.

SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

El error «más de una fila»

Este es el error que los entrevistadores esperan que sepa anticipar. Si utiliza la subconsulta con = o >, pero devuelve varias filas, el motor produce el siguiente error:

  • Postgres: more than one row returned by a subquery used as an expression
  • MySQL: Subquery returns more than 1 row

La consulta siguiente falla porque puede haber varios empleados en el departamento 5 — la subconsulta no es escalar.

SELECT name
FROM employees
WHERE salary = (SELECT salary FROM employees WHERE dept_id = 5);

Cómo garantizar que una subconsulta sea escalar

Hay dos formas fiables de garantizar un único valor:

  • Utilice una función de agregación como MAX, MIN o AVG — las funciones de agregación sin GROUP BY siempre devuelven una fila.
  • Utilice LIMIT 1 (Postgres/MySQL) o FETCH FIRST 1 ROW ONLY después de un ORDER BY.

La versión corregida siguiente solicita el salario más alto del departamento 5.

SELECT name
FROM employees
WHERE salary = (
  SELECT MAX(salary) FROM employees WHERE dept_id = 5
);

Las subconsultas escalares devuelven NULL cuando no hay filas

Un detalle sutil para las entrevistas: si una subconsulta escalar coincide con cero filas, no produce un error — devuelve NULL. Ese NULL se propaga después por la comparación.

Como salary > NULL se evalúa como UNKNOWN (no como verdadero), la consulta externa no devuelve ninguna fila. Muchos candidatos esperan un error en este caso; la respuesta correcta es un resultado vacío y silencioso.

SELECT name, salary
FROM employees
WHERE salary > (
  SELECT AVG(salary) FROM employees WHERE dept_id = 9999
);

Ejemplo práctico: empleados por encima de la media y la diferencia

Combinemos ambas ubicaciones. Mostramos cada empleado que está por encima de la media y cuánto supera dicha media. La misma subconsulta escalar aparece en SELECT y WHERE.

Un entrevistador podría preguntar si la subconsulta se ejecuta dos veces. Desde el punto de vista lógico aparece dos veces, pero un buen optimizador puede evaluar la subconsulta no correlacionada una sola vez y reutilizarla.

SELECT
  name,
  salary,
  salary - (SELECT AVG(salary) FROM employees) AS above_avg
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees)
ORDER BY above_avg DESC;

Una subconsulta escalar en ORDER BY

Como una subconsulta escalar no es más que un valor, también se permite en ORDER BY. Rara vez es la opción más clara, pero a los entrevistadores les gusta comprobar que sabe que está permitida.

Aquí ordenamos los departamentos según un valor obtenido de otra tabla — el número de empleados de cada departamento — sin utilizar un JOIN.

SELECT d.dept_name
FROM departments d
ORDER BY (
  SELECT COUNT(*) FROM employees e WHERE e.dept_id = d.id
) DESC;

Escalar frente a correlacionada: reconocer la diferencia

El ejemplo de ORDER BY anterior hace referencia en secreto a d.id de la consulta externa — eso lo convierte en una subconsulta escalar correlacionada, que se ejecuta una vez por cada fila externa.

A los entrevistadores les encanta esta distinción:

  • Subconsulta escalar no correlacionada: independiente, se ejecuta una vez.
  • Subconsulta escalar correlacionada: hace referencia a la fila externa, se ejecuta una vez por fila.

Ambas siguen siendo escalares (devuelven un valor), pero el rendimiento puede variar drásticamente.

Cuándo NO usar una subconsulta escalar

Una subconsulta escalar correlacionada en la lista SELECT resulta práctica, pero puede ser lenta en tablas grandes — se ejecuta una vez por fila. Los entrevistadores esperan que conozca las alternativas:

  • Un LEFT JOIN con una tabla derivada preagregada.
  • Una función de ventana como AVG(salary) OVER ().

La versión con función de ventana siguiente produce la misma columna con la media de la empresa sin un escaneo independiente de la subconsulta.

SELECT
  name,
  salary,
  AVG(salary) OVER () AS company_avg
FROM employees;

Frase clave para la entrevista

Si le piden definir una subconsulta escalar, diga lo siguiente: "Una subconsulta escalar devuelve una fila y una columna, por lo que actúa como un único valor y puede utilizarse en cualquier lugar donde se permita un literal. Si devuelve más de una fila, el motor produce un error; si no devuelve ninguna fila, genera NULL."

Esta única frase abarca la definición, el caso de error y el caso límite de NULL — las tres cosas que todo entrevistador espera escuchar.

Comprobación rápida

Ponga a prueba su comprensión del comportamiento de las subconsultas escalares.

Repaso

Ya domina las subconsultas escalares:

  • Definición: una fila y una columna — se pueden utilizar como un literal en SELECT, WHERE, HAVING y ORDER BY.
  • Varias filas con =/> producen un error; garantice que la subconsulta sea escalar mediante una función de agregación o LIMIT 1.
  • Cero filas producen NULL, que elimina filas silenciosamente en un filtro.
  • Las subconsultas escalares correlacionadas se ejecutan una vez por fila; prefiera JOIN o funciones de ventana cuando el rendimiento sea importante.

Siguiente: subconsultas en la cláusula FROM, donde el resultado es una tabla virtual completa.

Preguntas frecuentes

¿La lección «Subconsultas escalares en SELECT y WHERE» es gratis?

Sí — el texto completo de «Subconsultas escalares en SELECT y WHERE» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Interview Prep, actualiza a CoddyKit PRO. El curso de SQL Interview Prep incluye 4 lecciones en total.

¿Qué aprenderé en «Subconsultas escalares en SELECT y WHERE»?

Use subconsultas que devuelven un único valor y conozca el error que se produce si devuelven más de una fila Practicas SQL Interview Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Interview Prep?

No se requiere experiencia previa. SQL Interview Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Subconsultas escalares en SELECT y WHERE»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Interview Prep?

Sí. Cada lección de SQL Interview Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Subconsultas escalares en SELECT y WHERE
  2. Subconsultas en la cláusula FROM (tablas derivadas)
  3. Subconsultas IN, ANY y ALL
  4. Rendimiento de EXISTS frente a IN
← Volver a SQL Interview Prep