Ainda não entendi - é melhor para o desempenho restringir os dados dentro da WHERE
cláusula ou dentro da JOIN
cláusula. Qual é a melhor maneira? Li há muito tempo que não há diferença, mas ainda não tenho certeza. Estou falando do INNER JOIN - nesse caso o resultado é o mesmo.
EXEMPLO:
SELECT * FROM A JOIN B ON (A.X = B.Y) WHERE (A.Z = 5);
vs
SELECT * FROM A JOIN B ON (A.X = B.Y) AND (A.Z = 5);
A melhor maneira é aquela que combina com o estilo de codificação da sua equipe. Se você trabalha sozinho, a melhor maneira é aquela que você acha mais legível. Atualmente, não há diferença de desempenho para as consultas na pergunta.
Você pode usar o sinalizador de rastreamento não documentado 8606 para ver isso por si mesmo. Segue o código que estou testando:
Não só as consultas têm exatamente o mesmo plano:
Eles também têm a mesma árvore de entrada interna:
Em outras palavras, o SQL Server reescreve as consultas para serem as mesmas antes da otimização. Portanto, não haverá diferença de desempenho.