EXISTS en SQL
El operador
EXISTS
en SQL comprueba si una subconsulta devuelve al menos una fila
. Si la subconsulta tiene resultados, la condición es verdadera; si no, falsa.
EXISTS en SQL es una pieza habitual del flujo SQL: consultar, filtrar, agrupar o modificar datos. Cada ejemplo usa tablas de demostración para que puedas experimentar sin riesgo.
Cómo practicar: ejecuta la consulta tal cual, revisa columnas y tipos, luego cambia un filtro o un alias y vuelve a ejecutar.
Suele usarse en el
WHERE
de la consulta principal. La subconsulta puede referenciar columnas de la consulta exterior (subconsulta correlacionada).
Sintaxis EXISTS en SQL
La sintaxis indica el orden de argumentos y palabras clave. Copia la plantilla y sustituye nombres de columnas o literales entre comillas simples.
Plantilla
SELECT columna(s)
FROM tabla_exterior
WHERE EXISTS (
SELECT 1
FROM otra_tabla
WHERE condicion_de_relacion
);
Ejemplo EXISTS en SQL
Lista clientes para los que existe al menos un registro en Pedidos :
Clientes que han pedido
SELECT Nombre_Cliente
FROM Clientes c
WHERE EXISTS (
SELECT 1 FROM Pedidos p
WHERE p.ID_Cliente = c.ID_Cliente
)
ORDER BY Nombre_Cliente;
Resultado:
cinco clientes con al menos un pedido (equivalente a un
INNER JOIN
distinto, pero
EXISTS
solo comprueba existencia).
Tablas demo para EXISTS
Tabla Pedidos (demo)
Observa qué columnas devuelve la consulta y cómo se nombran con AS. Ese alias es lo que verás en la cuadrícula del editor.
| ID_Pedido | ID_Cliente | ID_Empleado | Fecha |
|---|---|---|---|
| 1 | 1 | 1 | 2024-01-15 |
| 2 | 3 | 2 | 2024-01-18 |
| 3 | 5 | 1 | 2024-02-02 |
| 4 | 2 | 3 | 2024-02-10 |
| 5 | 6 | 4 | 2024-02-14 |
| ID_Cliente | Nombre_Cliente | Ciudad | Pais |
|---|---|---|---|
| 1 | Ana García | Madrid | España |
| 2 | Luis Pérez | Barcelona | España |
| 3 | María López | Valencia | España |
| 4 | Carlos Ruiz | Madrid | España |
| 6 | John Smith | London | UK |
| … 5 clientes más en la demo (10 en total) | |||
Tabla Proveedores (demo)
| ID_Proveedor | Nombre | Ciudad | Pais |
|---|---|---|---|
| 1 | Alimentos Ibérica | Madrid | España |
| 2 | Delicias del Mar | Vigo | España |
| 3 | Granos del Valle | Zaragoza | España |
| 4 | Lácteos Premium | Lugo | España |
| 5 | Frutas del Sur | Málaga | España |
| 6 | Import Foods Ltd | London | UK |
EXISTS correlacionado en SQL
Países que tienen tanto clientes como proveedores en la demo:
Países compartidos
SELECT DISTINCT Pais
FROM Clientes c
WHERE EXISTS (
SELECT 1 FROM Proveedores p
WHERE p.Pais = c.Pais
)
ORDER BY Pais;
EXISTS con Empleados y Pedidos
Empleados con pedidos asignados
SELECT Nombre, Apellido
FROM Empleados e
WHERE EXISTS (
SELECT 1 FROM Pedidos p
WHERE p.ID_Empleado = e.ID_Empleado
)
ORDER BY Nombre;
Resumen EXISTS
-
EXISTSdevuelve verdadero si la subconsulta encuentra filas. - No importa cuántas filas devuelva la subconsulta: basta con una.
- Útil para filtrar por relación sin duplicar filas del exterior.
- Relacionado: IN y ANY / ALL .
Cómo practicar en el editor
1. Pulsa Pruébalo tú mismo en un ejemplo.
2. Cambia un filtro, columna o literal.
3. Ejecuta y compara el resultado con la tabla de ejemplo.
Comprueba lo aprendido
Responde 2–3 preguntas sobre esta lección. Verás ✓ en verde si aciertas o ✗ en rojo si fallas.