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.
excelente meu amigo!
Excelente explicação.
Simples, objetivo, com exemplos bem esclarecedores.
De todos os posts que li, esse foi o único que consegui entender.
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