Con el operador SQL EXISTS puedes comprobar una su­b­co­n­su­l­ta en busca de una entrada es­pe­cí­fi­ca. El resultado es un valor booleano. También es posible consultar múltiples co­n­di­cio­nes.

¿Qué es SQL EXISTS?

En el Stru­c­tu­red Query Language, además de las consultas regulares, existe el concepto de “su­b­co­n­su­l­tas” o “su­b­que­ries”. Si deseas verificar si un valor es­pe­cí­fi­co está presente dentro de una de estas su­b­co­n­su­l­tas, puedes utilizar el operador SQL EXISTS. Este aplica una condición definida a la su­b­co­n­su­l­ta 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 uti­li­zar­se con los comandos SQL DELETE, INSERT, SELECT y UPDATE.

Se­r­vi­do­res virtuales (VPS)
VPS rentables en se­r­vi­do­res Dell En­te­r­pri­se
  • 1 Gb/s de ancho de banda y tráfico ilimitado
  • 99,99 % de tiempo de actividad y ce­r­ti­fi­ca­ción ISO
  • Soporte 24/7 ga­la­r­do­na­do y asesor personal

Sintaxis y fu­n­cio­na­li­dad

A co­n­ti­nua­ción, te mostramos cómo funciona SQL EXISTS en co­m­bi­na­ción con SELECT. La sintaxis co­rre­s­po­n­die­n­te 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 co­n­ti­nua­ción, se introduce el nombre de la tabla en la que se ejecutará el comando. Después, se co­m­pro­ba­rá la su­b­co­n­su­l­ta mediante WHERE EXISTS. En este punto, se introduce entre pa­ré­n­te­sis la su­b­co­n­su­l­ta co­rre­s­po­n­die­n­te.

Cuando se ejecuta el código, se inicia primero la consulta de nivel superior. A co­n­ti­nua­ción, el sistema inicia la su­b­co­n­su­l­ta. 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 su­b­co­n­su­l­ta es NULL, se omite el resultado de la consulta principal.

Ejemplo de uso del operador

La forma más sencilla de ilustrar el si­g­ni­fi­ca­do y la fu­n­cio­na­li­dad de SQL EXISTS es con un ejemplo. Para ello, crearemos dos tablas di­fe­re­n­tes. 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 co­m­pre­n­di­do entre el 17 de enero y el 3 de febrero. Para ello uti­li­za­re­mos 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 co­m­pro­ba­rá 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 co­rre­s­po­n­die­n­tes se eli­mi­na­rán de la lista:

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

Consulta de co­n­di­cio­nes múltiples

También tienes la po­si­bi­li­dad de consultar varias co­n­di­cio­nes y así es­pe­ci­fi­car aún más tu selección. En el siguiente ejemplo, queremos comprobar si no solo se incluyen de­te­r­mi­na­dos 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

Co­m­bi­na­ción con NOT

SQL EXISTS también te ofrece una opción si quieres hacer el proceso contrario. En el siguiente ejemplo, co­n­su­l­ta­mos todos los clientes que no han realizado un pedido en el periodo de tiempo co­rre­s­po­n­die­n­te. 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

Al­te­r­na­ti­vas a SQL EXISTS

Existen algunas al­te­r­na­ti­vas a SQL EXISTS que también te permiten utilizar su­b­co­n­su­l­tas para verificar entradas es­pe­cí­fi­cas. Las opciones más prácticas son los ope­ra­do­res IN y JOIN, que puedes ajustar según tus ne­ce­si­da­des.

Consejo

Consigue alto re­n­di­mie­n­to y ase­so­ra­mie­n­to pe­r­so­na­li­za­do: con el Hosting SQL Server de IONOS, puedes elegir entre MSSQL, MySQL y MariaDB. ¡Elige el que mejor se adapte a tus ne­ce­si­da­des!

Ir al menú principal