Treinamento para Consultas com SQL Server – Parte 2 – JOINS – considerações sobre desempenho


No post anterior uma das consultas realizava um filtro usando JOIN em vez de colocar a expressão na cláusula WHERE onde a grande maioria colocaria ao escrever um filtro. A consulta é a seguinte:


select pp.FirstName + ' ' + pp.LastName as CompleteName
   ,HRE.JobTitle
   ,HRE.BirthDate
   ,EA.EmailAddress
   ,A.AddressLine1
   ,A.AddressLine2
   ,A.City
from person.person as pp
join HumanResources.Employee HRE on hre.BusinessEntityID =
      pp.BusinessEntityID 
  and hre.JobTitle = 'Application Specialist'
join Person.BusinessEntityAddress BEA on BEA.BusinessEntityID = 
  HRE.BusinessEntityID
join Person.Address A on A.AddressID = BEA.AddressID
join Person.EmailAddress EA on EA.BusinessEntityID = 
  HRE.BusinessEntityID;


Qual seria a diferença em termos de desempenho se a cláusula em destaque colocada no JOIN fosse colocada no WHERE?

select pp.FirstName + ' ' + pp.LastName as CompleteName
   ,HRE.JobTitle
   ,HRE.BirthDate
   ,EA.EmailAddress
   ,A.AddressLine1
   ,A.AddressLine2
   ,A.City
from person.person as pp
join HumanResources.Employee HRE on hre.BusinessEntityID =
     pp.BusinessEntityID
join Person.BusinessEntityAddress BEA on BEA.BusinessEntityID = 
   HRE.BusinessEntityID
join Person.Address A on A.AddressID = BEA.AddressID
join Person.EmailAddress EA on EA.BusinessEntityID = 
   HRE.BusinessEntityID
where hre.JobTitle = 'Application Specialist'

Nenhuma. 
Não sou eu quem está dizendo isso mas, o analisador de desempenho do SQL SERVER. Veja a análise para o custo de desempenho que foi coletado na ferramenta SQL Server Manager para os dois casos:




Não acredita? Faça o teste e depois me diga.
O por que disto?
Simples, a operação de filtro usada no mecanismo é a mesma tanto para o join como para WHERE. Internamente o SQL Server precisa percorrer os registros e aplicar o filtro para trazer somente os registros que satisfaçam a condição.
Logo, usar um filtro em WHERE ou JOIN, para o mecanismo do banco de dados não fará diferença.

Mais dados para comparações:

Edição do SQL Server: 2012 Express Edition With Advanced Services
Computador: Notebook Dell, Core 2 Duo 2.2 GHZ
Memória RAM: 3 GB
Windows 8.1 Professional 32 Bits.