SQL é uma linguagem de programação usada para gerenciar dados em um sistema de gerenciamento de banco de dados relacional (RDBMS). O SQL tem muitos recursos e funções úteis para executar várias operações em dados, como inserir, atualizar, excluir e recuperar dados.
Uma das operações que geralmente é feita no SQL é verificar se determinados dados já estão na tabela ou não. Isso é útil para evitar duplicação de dados, validar entradas ou especificar condições para outras consultas.
Existem várias maneiras de verificar se os dados já estão em uma tabela, mas uma das maneiras mais comuns e eficientes é usar a cláusula EXISTS. Uma cláusula EXISTS é uma cláusula condicional que retorna um valor TRUE ou FALSE com base no fato de uma determinada subconsulta resultar em pelo menos uma linha ou não.

Neste artigo, Bardimin discutirá como usar EXISTS cláusulas no SQL, quais são as vantagens e desvantagens e como compará-las com outros métodos, como usar COUNT ou JOIN. Bardimin também fornecerá alguns exemplos de uso de EXISTS em vários cenários e bancos de dados, como o MySQL.
Sintaxe e exemplos básicos do SQL EXISTS
A sintaxe básica para usar EXISTS cláusulas no SQL é a seguinte:
SELECT column_name(s) FROM table_name WHERE EXISTS (subquery);
Aqui, subquery é uma consulta que está entre parênteses e geralmente se refere à mesma tabela ou outra tabela conectada à tabela principal. A subconsulta deve retornar pelo menos uma coluna, mas o valor dessa coluna é irrelevante porque EXISTS só se importa se alguma linha é gerada ou não.
Vejamos um exemplo simples de uso de EXISTS em SQL. Suponha que tenhamos uma tabela mahasiswa que contenha dados sobre os estudantes de uma universidade, da seguinte forma:
id | nama | jurusan | angkatan |
1 | Ali | Matemática | 2019 |
2 | Mente | Física | 2020 |
3 | Cici | Biologia | 2019 |
4 | Dedi | Química | 2020 |
5 | Um | Matemática | 2021 |
Temos também uma tabela nilai que contém dados sobre as notas dos alunos em vários cursos, como os seguintes:
id_mahasiswa | kode_mk | nilai |
1 | MA101 | 80 |
1 | MA102 | 85 |
2 | FI101 | 75 |
2 | FI102 | 70 |
3 | BI101 | 90 |
4 | KI101 | 95 |
5 | MA101 | 60 |
Se quisermos exibir dados de alunos que tenham valores na tabela nilai, podemos usar a cláusula EXISTS da seguinte maneira:
SELECT * FROM mahasiswa m WHERE EXISTS ( SELECT 1 FROM nilai n WHERE m.id = n.id_mahasiswa );
Os resultados da consulta acima são os seguintes:
id | nama | jurusan | angkatan |
1 | Ali | Matemática | 2019 |
2 | Mente | Física | 2020 |
3 | Cici | Biologia | 2019 |
4 | Dedi | Química | 2020 |
5 | Um | Matemática | 2021 |
A consulta acima usa uma subconsulta que retorna um valor de 1 para cada linha que atende à condição m.id =n.id_mahasiswa, o que significa que o aluno tem um valor na tabela nilai. Como a subconsulta retorna pelo menos uma linha para cada aluno, a cláusula EXISTS retorna TRUE e esse aluno é exibido nos resultados da consulta.
Observe que podemos usar qualquer valor em uma subconsulta, mesmo NULL ou *, porque esse valor não afeta EXISTS resultados. No entanto, por motivos de desempenho, é recomendável usar os valores de constante mais simples, como 1, 0 ou NULL, já que o SQL não precisa processar os valores reais da coluna.