Filtros · subconsultas

ANY y ALL en SQL

Compara un valor con una columna devuelta por una subconsulta: ANY necesita que al menos una comparación sea verdadera; ALL, que lo sean todas.

Lectura: 7–9 minResultados comprobadosPráctica con pistas
Contenido de esta guía

Qué significan ANY y ALL

Ambos operadores aparecen después de un operador de comparación y antes de una subconsulta que devuelve una sola columna.

  • x > ANY (subconsulta) es verdadero si x es mayor que al menos uno de los valores comparados.
  • x > ALL (subconsulta) es verdadero si x es mayor que todos los valores comparados.

SOME es sinónimo de ANY en PostgreSQL y MySQL. Además, = ANY (...) expresa la misma idea de pertenencia que IN (...).

Sintaxis básica

Forma general
expresion operador ANY (subconsulta)
expresion operador ALL (subconsulta)

La subconsulta debe producir una columna compatible con la expresión de la izquierda. El operador puede ser, por ejemplo, =, <>, <, <=, > o >=.

Ejemplo: superar todos los precios de una categoría

En la base educativa, los productos de Audio cuestan 54,00 y 69,90. Esta consulta pide productos cuyo precio sea mayor que todos esos valores:

PostgreSQL / MySQL
SELECT nombre, precio
FROM productos
WHERE precio > ALL (
  SELECT precio
  FROM productos
  WHERE categoria = 'Audio'
)
ORDER BY precio;
Resultado esperado con los datos educativos
nombreprecio
Disco SSD89.0
Monitor 24179.0
Monitor 27249.0
Portátil Pro999.0

Como 69,90 es el mayor precio de Audio, en este conjunto concreto la condición coincide con precio > 69.90. La forma con ALL conserva, sin embargo, la intención de comparar contra el conjunto devuelto por la subconsulta.

ANY: basta una comparación verdadera

Mayor que algún precio de Pantallas
SELECT nombre, precio
FROM productos
WHERE precio > ANY (
  SELECT precio
  FROM productos
  WHERE categoria = 'Pantallas'
)
ORDER BY precio;

Los precios de Pantallas son 179 y 249. Superar cualquiera de ellos significa, con estos datos sin valores nulos, superar al menos 179. El resultado es Monitor 27 (249) y Portátil Pro (999).

No leas ANY como “cualquier valor” en lenguaje cotidiano. Léelo como una condición existencial: «hay al menos una comparación que da verdadero».

NULL y conjuntos vacíos cambian la intuición

Las comparaciones con NULL producen un resultado desconocido. Por eso, si ninguna comparación de ANY es verdadera pero alguna es desconocida, el resultado puede ser NULL en lugar de falso. Con ALL, si ninguna comparación es falsa pero alguna es desconocida, también puede aparecer NULL.

La subconsulta vacía también tiene una regla importante: ANY resulta falso porque no existe una comparación verdadera; ALL resulta verdadero porque no existe ninguna fila que contradiga la condición.

Reescribir sin pensar en NULL o en el conjunto vacío

Para datos no nulos y un conjunto no vacío, x > ALL (subconsulta) puede parecer equivalente a comparar con MAX(...), y x > ANY (...) con MIN(...). Esa reescritura no conserva automáticamente todos los casos límite. Si necesitas equivalencia general, trata de forma explícita los valores nulos y la posibilidad de que la subconsulta no devuelva filas.

Compatibilidad entre motores

PostgreSQL y MySQL documentan las comparaciones con ANY/SOME y ALL. La gramática de expresiones de SQLite documenta IN, EXISTS y subconsultas escalares, pero no esta forma de ANY/ALL; en SQLite conviene expresar la intención con IN, EXISTS, agregaciones o una reescritura explícita según el caso.

El laboratorio local de AprenderSQL.es usa SQLite, por lo que los ejemplos con sintaxis ANY/ALL se presentan como referencia de dialecto. Sus resultados sobre el conjunto educativo se comprobaron mediante condiciones equivalentes para esos datos.

Comprueba lo aprendido

Intermedia · subconsultas

Supera algún precio de Pantallas

Escribe una consulta para devolver nombre y precio de los productos cuyo precio sea mayor que al menos uno de los precios de la categoría Pantallas. Ordena por precio ascendente.

Qué debes recordar

  • ANY necesita al menos una comparación verdadera.
  • ALL necesita que todas las comparaciones sean verdaderas.
  • = ANY expresa la misma pertenencia que IN.
  • NULL y una subconsulta vacía pueden cambiar el resultado esperado.
  • No todos los motores admiten la misma sintaxis; comprueba el dialecto.

Conceptos relacionados

Fuentes técnicas consultadas