Subconsulta con una fila y una columna

En esta lección vamos a ver con más detalle la subconsulta que devuelve una fila y una columna. Este tipo de subconsulta también se conoce como subconsulta escalar.

Se puede usar en distintas partes de la consulta SQL principal, pero lo más habitual es encontrarla en las condiciones que filtran el resultado con operadores de comparación (=, <>, >, <).

Ejemplos

La siguiente consulta, muy sencilla, muestra un único valor (el nombre de una compañía). Tal cual no tiene mucho sentido, pero tus consultas pueden ser mucho más complejas.

MySQL 8.4
SELECT (SELECT name FROM company LIMIT 1) AS company_name;
company_name
Don_avia

Del mismo modo, puedes usar subconsultas escalares para filtrar filas con WHERE mediante operadores de comparación.

MySQL 8.4
SELECT * FROM FamilyMembers
    WHERE birthday = (SELECT MAX(birthday) FROM FamilyMembers);
member_idstatusmember_namebirthday
8daughterWednesday Addams2005-01-13T00:00:00.000Z

Con esta consulta se obtiene el miembro más joven de la familia. Aquí la subconsulta hace falta para obtener la fecha de nacimiento máxima, que después se usa en la consulta principal para filtrar las filas.

La importancia de que el operador encaje con el resultado de la subconsulta

Cuando usas el resultado de una subconsulta con operadores de comparación, como en nuestro ejemplo, es importante que la subconsulta devuelva exactamente un valor escalar (1 fila y 1 columna).

Si esta subconsulta devolviera varios valores, el SGBD daría un error indicando que se esperaba que la subconsulta devolviera un solo registro: «ER_SUBQUERY_NO_1_ROW: Subquery returns more than 1 row».

Si esta subconsulta devolviera varios valores, el SGBD daría un error indicando que se esperaba que la subconsulta devolviera un solo registro: «ERROR: more than one row returned by a subquery used as an expression».

Por eso conviene tener cuidado al escribir subconsultas y saber qué resultado devolverá la subconsulta y qué operadores podemos usar con ese conjunto de resultados.