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.