No SQL, qual a diferença entre as cláusulas EXIST e IN?

A cláusula EXIST, segundo o site MSDN da microsoft, especifica uma subconsulta a ser testada quanto à existência de linhas. IN segundo o site MSDN da Microsoft determina se um valor especificado corresponde a qualquer valor em uma subconsulta ou uma lista.

Por exemplo: Imagine em um sistema previdenciário, um relatório que deseja trazer todos os credenciados que tem dependentes.

[sourcecode language=”sql”]
SELECT nome, matricula FROM credenciado WHERE EXIST (
SELECT ID FROM dependente WHERE dependente.responsavelID = credenciado.ID
)
[/sourcecode]

A consulta retornará apenas credenciados que tenham pelo menos um dependente. Como a claúsula EXIST deseja saber se existe pelo menos um, ele não realizará uma busca em toda a base de dados (Full Scan). No momento em que a subconsulta encontrar o primeiro resultado será finalizada, poupando recursos do servidor.

A cláusula IN tem um funcionamento diferente, utiliza-se quando o objetivo é verificar se a consulta retorna algum linha que esteja compatível com valores especificados.

Por exemplo: No mesmo sistema previdenciario, um relatório que se deseja trazer todos os credenciados que já morreram ou são inválidos.

[sourcecode language=”sql”]
SELECT nome, matricula FROM credenciado WHERE status IN (FALECIDO, INVALIDOS)
[/sourcecode]

Os valores especificados podem ser através de uma subconsulta.

3 comentários em “No SQL, qual a diferença entre as cláusulas EXIST e IN?”

  1. Excelente explicação.
    Simples, objetivo, com exemplos bem esclarecedores.
    De todos os posts que li, esse foi o único que consegui entender.

  2. daniel amaral

    não dá no mesmo fazer assim?

    SELECT nome, matricula FROM credenciado WHERE. credenciado.ID IN (
    SELECT dependente.responsavelID FROM dependente WHERE dependente.responsavelID = credenciado.ID

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima