Com o operador SQL EXISTS, você pode verificar se uma sub­con­sulta contém um valor es­pe­cí­fico. O resultado é um valor booleano. Também é possível consultar várias condições.

O que é SQL EXISTS?

Em SQL (Struc­tu­red Query Language), além das consultas regulares, existe o conceito de “sub­con­sul­tas” ou sub­que­ries. Se você quiser verificar se um valor es­pe­cí­fico está presente em uma dessas sub­con­sul­tas, você pode usar o operador SQL EXISTS. Este operador aplica uma condição definida à sub­con­sulta e retorna o valor TRUE (ou seja, “ver­da­deiro”) se a condição for sa­tis­feita. Somente se essa condição for atendida, a consulta principal será executada. O operador SQL EXISTS pode ser utilizado com os comandos SQL DELETE, INSERT, SELECT e UPDATE.

VPS Hosting (Virtual Private Servers)
World-class VPS at America’s lowest price

Hos­pe­da­gem VPS poderosa e de baixo custo para rodar suas apli­ca­ções sob medida, com as­sis­tente pessoal e suporte 24 horas.

  • Save 50% or more vs leading hosts
  • Unlimited traffic & no setup fees 
  • 99.99% uptime gua­ran­teed
  • Free 24/7 premium support 

Sintaxe e fun­ci­o­na­mento de SQL EXISTS

A seguir, mostramos como o operador SQL EXISTS funciona em com­bi­na­ção com SELECT. A sintaxe cor­res­pon­dente é a seguinte:

SELECT nome_da_coluna(s)
FROM nome_da_tabela
WHERE EXISTS
(SELECT nome_da_coluna FROM nome_da_tabela WHERE condição);
sql

nome_da_coluna(s) refere-se à coluna ou colunas que devem ser filtradas pelo SELECT. Em seguida, você deve es­pe­ci­fi­car o nome da tabela onde o comando será executado. A ve­ri­fi­ca­ção da sub­con­sulta é feita por meio de WHERE EXISTS. Neste ponto, você fornece a sub­con­sulta cor­res­pon­dente entre pa­rên­te­ses.

Ao executar o código, a consulta principal é iniciada. Então, o sistema executa a sub­con­sulta. Se a sub­con­sulta retornar um resultado (ou seja, TRUE), o resultado da consulta principal será con­si­de­rado. Se o resultado da sub­con­sulta for NULL, o resultado da consulta principal também será ignorado.

Exemplo de aplicação de SQL EXISTS

A im­por­tân­cia e o fun­ci­o­na­mento do SQL EXISTS podem ser melhor com­pre­en­di­dos com um exemplo. Para isso, criamos duas tabelas di­fe­ren­tes. A primeira tabela é chamada “Lista de Clientes”. Nela estão listados vários clientes de uma empresa, com número de cliente, nome e lo­ca­li­za­ção. Esta tabela é como segue:

Número do Cliente Nome Lo­ca­li­za­Ã§Ã£o
1427 Machado Rio de Janeiro
1377 Silva Curitiba
1212 Recife Curitiba
1431 Ribeiro Luziânia
1118 Becker Palmas

Nossa segunda tabela é chamada de “Pedidos”. Ela contém para cada entrada um número de item, o número do cliente e a data do pedido. Ela é es­tru­tu­rada da seguinte forma:

Número do Item Número do Cliente Data do 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

Agora, podemos filtrar quais clientes fizeram pelo menos um pedido no período de 17 de janeiro a 3 de fevereiro. Para isso, uti­li­za­mos o seguinte código:

SELECT Número do Cliente, Nome, Localização
FROM Lista de Clientes
WHERE EXISTS
(SELECT * FROM Pedidos WHERE Clientes.Número do Cliente = Pedidos.Número do Cliente);
sql

O sistema verifica se os números dos clientes da tabela “Lista de Clientes” também aparecem na tabela “Pedidos”. Se isso acontecer (ou seja, o valor é TRUE), os registros cor­res­pon­den­tes são listados. A tabela re­sul­tante ficará assim:

Número do Cliente Nome Lo­ca­li­za­Ã§Ã£o
1431 Ribeiro Luziânia
1118 Becker Palmas

Consultar várias condições com SQL EXISTS

Você também tem a pos­si­bi­li­dade de consultar várias condições e, assim, es­pe­ci­fi­car ainda mais sua seleção. No exemplo a seguir, queremos verificar se não apenas certos números de cliente estão presentes, mas também se a lo­ca­li­za­ção é Luziânia. O código fica assim:

SELECT Número do Cliente, Nome, Localização
FROM Lista de Clientes
WHERE EXISTS
(SELECT * FROM Pedidos WHERE Clientes.Número do Cliente = Pedidos.Número do Cliente AND Localização = 'Luziânia');
sql

Aqui o resultado também é TRUE e a saída é a seguinte:

Número do Cliente Nome Lo­ca­li­za­Ã§Ã£o
1431 Ribeiro Luziânia

Combinar SQL EXISTS e NOT

Se você quiser seguir o caminho inverso, o SQL EXISTS também oferece essa opção. No exemplo a seguir, buscamos todos os clientes que não fizeram nenhum pedido no período cor­res­pon­dente. Para isso, adi­ci­o­na­mos o com­ple­mento NOT.

SELECT Número do Cliente, Nome, Localização
FROM Lista de Clientes
WHERE NOT EXISTS
(SELECT * FROM Pedidos WHERE Clientes.Número do Cliente = Pedidos.Número do Cliente);
sql

A saída será:

Número do Cliente Nome Lo­ca­li­za­Ã§Ã£o
1427 Machado Rio de Janeiro
1377 Silva Curitiba
1212 Recife Curitiba

Al­ter­na­ti­vas ao SQL EXISTS

Existem algumas al­ter­na­ti­vas ao SQL EXISTS que também permitem in­ves­ti­gar sub­con­sul­tas em busca de entradas es­pe­cí­fi­cas. As opções mais práticas são os ope­ra­do­res IN e JOIN, que você também pode es­pe­ci­fi­car de acordo com suas ne­ces­si­da­des.

Dica

De­sem­pe­nho de alta qualidade e con­sul­to­ria per­so­na­li­zada! Com SQL Server Hosting da IONOS, você pode escolher entre MSSQL, MySQL e MariaDB. Escolha o modelo que melhor se adapta às suas ne­ces­si­da­des!

Ir para o menu principal