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.

<br />
SELECT nome, matricula FROM credenciado WHERE EXIST (<br />
    SELECT ID FROM dependente WHERE dependente.responsavelID = credenciado.ID<br />
)<br />

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.

<br />
SELECT nome, matricula FROM credenciado WHERE status IN (FALECIDO, INVALIDOS)<br />

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

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

  1. 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

    Responder

Deixe uma resposta

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