Questão sobre SQL Server…

Ontem me deparei com uma questão um tanto quanto interessante…
Qual o resultado das queries abaixo? Elas são equivalentes???

Query 1:


Query 2:


Passando o olho rapidamente, parece ser a mesma coisa, mas reparem na última linha, a única diferença entre elas é o uso do where e o outro existe somente o join.

Bom, a resposta é: Não, elas não são equivalentes… o resultado é completamente diferente!!
Execute no SSMS e veja.
Mas agora vamos ao “Mas porque isso acontece?”
Isso ocorre pois quando o SQL Server processa um join, a engine escolhe o método mais eficiente de processá-la. Apesar da execução física de vários joins utilizar diferentes formas de otimização, a sequência (sem trema) lógica é:

1. A condição do join na cláusula FROM é aplicada.
2. A condição do join e a condição da busca da cláusula WHERE é aplicada.
3. a condição da busca da cláusula HAVING é aplicada.

Esta sequência pode às vezes influenciar no resultado de uma query se condições são movidas entre a cláusula FROM e a WHERE.

Referência do estudo: Join Fundamentals

A segunda consulta é equivalente à consulta abaixo, que mostra de form
a mais clara o resultado vazio que é T2:

 

Deixe um comentário

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

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.