SQL EXISTS: comprueba valores en subconsultas

Con el operador SQL EXISTS puedes comprobar una subconsulta en busca de una entrada específica. El resultado es un valor booleano. También es posible consultar múltiples condiciones.

¿Qué es SQL EXISTS?

En el Structured Query Language, además de las consultas regulares, existe el concepto de “subconsultas” o “subqueries”. Si deseas verificar si un valor específico está presente dentro de una de estas subconsultas, puedes utilizar el operador SQL EXISTS. Este aplica una condición definida a la subconsulta y devuelve el valor TRUE (es decir, verdadero) si se cumple dicha condición. Solo en ese caso se ejecutará la consulta principal. SQL EXISTS puede utilizarse con los comandos SQL DELETE, INSERT, SELECT y UPDATE.

Servidores virtuales VPS
Virtualización completa con acceso root
  • Ancho de banda de hasta 1 Gb/s y tráfico ilimitado
  • Almacenamiento SSD NVMe ultrarrápido
  • Incluye: edición Plesk Web Host

Sintaxis y funcionalidad

A continuación, te mostramos cómo funciona SQL EXISTS en combinación con SELECT. La sintaxis correspondiente es la siguiente:

SELECT nombre_de_columna(s) 
FROM nombre_de_tabla 
WHERE EXISTS 
(SELECT nombre_de_columna FROM nombre_de_tabla WHERE condición);
sql

nombre_de_columna(s) indica la columna o columnas que se van a filtrar con SELECT. A continuación, se introduce el nombre de la tabla en la que se ejecutará el comando. Después, se comprobará la subconsulta mediante WHERE EXISTS. En este punto, se introduce entre paréntesis la subconsulta correspondiente.

Cuando se ejecuta el código, se inicia primero la consulta de nivel superior. A continuación, el sistema inicia la subconsulta. Si ésta devuelve un resultado (es decir, TRUE), se tiene en cuenta el resultado de la consulta principal. Sin embargo, si el resultado de la subconsulta es NULL, se omite el resultado de la consulta principal.

Ejemplo de uso del operador

La forma más sencilla de ilustrar el significado y la funcionalidad de SQL EXISTS es con un ejemplo. Para ello, crearemos dos tablas diferentes. La primera tabla se llamará “Lista de clientes”. En ella se listan varios clientes de una empresa con su número de cliente, nombre y ubicación:

Número de cliente Nombre Ubicación
1427 Pérez Madrid
1377 Martín Barcelona
1212 Hernández Barcelona
1431 Rodríguez Sevilla
1118 García Valencia

Nuestra segunda tabla se llamará “Pedidos”. Contendrá un número de artículo, el número de cliente y la fecha de pedido de cada entrada:

Número de artículo Número de cliente Fecha del pedido
00282 1172 2024-01-17
00311 1361 2024-01-19
00106 1431 2024-01-19
00378 1274 2024-01-30
00418 1118 2024-02-03

Ahora podemos filtrar qué clientes han realizado al menos un pedido en el periodo comprendido entre el 17 de enero y el 3 de febrero. Para ello utilizaremos el siguiente código:

SELECT Número de cliente, Nombre, Ubicación 
FROM Lista de clientes 
WHERE EXISTS 
(SELECT * FROM Pedidos WHERE Lista_de_clientes.Número_de_cliente = Pedidos.Número_de_cliente);
sql

Ahora el sistema comprobará si los números de cliente de la lista de clientes aparecen también en los pedidos. Si es así (es decir, si el valor es TRUE), las entradas correspondientes se eliminarán de la lista:

Número de cliente Nombre Ubicación
1431 Rodríguez Sevilla
1118 García Valencia

Consulta de condiciones múltiples

También tienes la posibilidad de consultar varias condiciones y así especificar aún más tu selección. En el siguiente ejemplo, queremos comprobar si no solo se incluyen determinados números de cliente, sino también la localidad de Sevilla:

SELECT Número de cliente, Nombre, Ubicación 
FROM Lista de clientes 
WHERE EXISTS 
(SELECT * FROM Pedidos WHERE Lista_de_clientes.Número_de_cliente = Pedidos.Número_de_cliente AND Ubicación = 'Sevilla');
sql

En este caso, el resultado también es TRUE:

Número de cliente Nombre Ubicación
1431 Rodríguez Sevilla

Combinación con NOT

SQL EXISTS también te ofrece una opción si quieres hacer el proceso contrario. En el siguiente ejemplo, consultamos todos los clientes que no han realizado un pedido en el periodo de tiempo correspondiente. Para ello, añadimos la cláusula NOT.

SELECT Número de cliente, Nombre, Ubicación 
FROM Lista de clientes 
WHERE NOT EXISTS 
(SELECT * FROM Pedidos WHERE Lista_de_clientes.Número_de_cliente = Pedidos.Número_de_cliente);
sql

Este es el resultado:

Número de cliente Nombre Ubicación
1427 Pérez Madrid
1377 Martín Barcelona
1212 Hernández Barcelona

Alternativas a SQL EXISTS

Existen algunas alternativas a SQL EXISTS que también te permiten utilizar subconsultas para verificar entradas específicas. Las opciones más prácticas son los operadores IN y JOIN, que puedes ajustar según tus necesidades.

Consejo

Consigue alto rendimiento y asesoramiento personalizado: con el Hosting SQL Server de IONOS, puedes elegir entre MSSQL, MySQL y MariaDB. ¡Elige el que mejor se adapte a tus necesidades!

¿Le ha resultado útil este artículo?
Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continua navegando, consideramos que acepta su uso. Puede obtener más información, o bien conocer cómo cambiar la configuración de su navegador en nuestra. Política de Cookies.
Page top