Table of Contents
Cómo usar EXISTS en MySQL con una subconsulta (ejemplo paso a paso)
En este ejercicio vamos a aprender a utilizar EXISTS en MySQL mediante una subconsulta.
La cláusula EXISTS es muy útil cuando queremos comprobar si una condición se cumple al menos una vez en una subconsulta relacionada.
Dicho de otro modo:
👉 Si la subconsulta devuelve al menos una fila, EXISTS devuelve TRUE.
👉 Si la subconsulta no devuelve resultados, EXISTS devuelve FALSE.
Paso 1: Usar la base de datos
Trabajaremos sobre la base de datos tiendaonline
:
USE tiendaonline;
Paso 2: Consultar las tablas
Antes de empezar, revisamos el contenido de las tablas clientes
y pedidos
:
SELECT * FROM clientes AS c;
SELECT * FROM pedidos AS p;
Paso 3: Subconsulta con EXISTS
Ahora queremos mostrar los nombres de aquellos clientes que tienen al menos un pedido registrado en la tabla pedidos
.
La consulta sería:
SELECT c.nombre FROM clientes AS c WHERE EXISTS ( SELECT 1 FROM pedidos AS p WHERE p.id_cliente = c.id_cliente );

Explicación de la consulta
SELECT 1
: no es relevante el valor que devolvemos en la subconsulta, basta con que exista al menos un registro. Por convención, se suele usar1
.EXISTS
: devuelveTRUE
si la subconsulta interna encuentra al menos una coincidencia.WHERE p.id_cliente = c.id_cliente
: esta condición relaciona cada cliente con sus pedidos.
En otras palabras:
👉 El cliente se mostrará en el resultado si tiene al menos un pedido en la tabla pedidos
.
Diferencia con IN
Podríamos lograr algo similar usando IN
, pero EXISTS
es más eficiente cuando queremos simplemente comprobar la existencia de registros, sin necesidad de obtener valores específicos.
Ejemplo con IN
:
SELECT c.nombre
FROM clientes AS c
WHERE c.id_cliente IN (
SELECT p.id_cliente FROM pedidos AS p
);
Ambas consultas devuelven el mismo resultado, pero EXISTS suele ser más rápido en bases de datos grandes.



Con este ejercicio aprendimos a:
- Usar subconsultas correlacionadas en MySQL.
- Verificar resultados con la cláusula EXISTS.
- Comparar el uso de
EXISTS
frente aIN
.
EXISTS es muy útil para comprobaciones booleanas: ¿existen registros que cumplan esta condición?



Preguntas frecuentes (FAQ)
1. ¿Qué diferencia hay entre EXISTS y IN en MySQL?
EXISTS
evalúa si la subconsulta devuelve al menos un registro (se centra en la existencia).IN
compara valores dentro de una lista de resultados.
2. ¿EXISTS siempre devuelve TRUE o FALSE?
Sí. EXISTS solo comprueba si hay resultados. No importa qué datos devuelva la subconsulta.
3. ¿Qué significa SELECT 1
dentro de EXISTS?
El valor es irrelevante. Podría ser SELECT *
, SELECT NULL
o SELECT 1
. Lo importante es si se devuelve alguna fila.
4. ¿Cuándo debo usar EXISTS en lugar de IN?
EXISTS es más eficiente en tablas grandes cuando solo necesitas comprobar la existencia de filas relacionadas.
5. ¿Puedo anidar múltiples EXISTS en una misma consulta?
Sí. Puedes usarlos en varias condiciones para validar relaciones entre diferentes tablas.
Te puede interesar:
Seguir leyendo: