Existe uma diferença de desempenho entre essas duas consultas de exemplo?
Consulta 1:
select count(*)
from table1 a
join table2 b
on b.key_col=a.key_col
where b.tag = 'Y'
Consulta 2;
select count(*)
from table1 a
join table2 b
on b.key_col=a.key_col
and b.tag = 'Y'
Observe que a única diferença é a colocação da condição suplementar; o primeiro usa uma WHERE
cláusula e o segundo adiciona a condição à ON
cláusula.
Quando executo essas consultas em meu sistema Teradata, os planos de explicação são idênticos e a etapa JOIN mostra a condição adicional em cada caso. No entanto, nesta questão do SO em relação ao MySQL, uma das respostas sugeriu que o segundo estilo é preferido porque WHERE
o processamento ocorre após as junções serem feitas.
Existe uma regra geral a seguir ao codificar consultas como esta? Acho que deve depender da plataforma, pois obviamente não faz diferença no meu banco de dados, mas talvez seja apenas um recurso do Teradata. E se for dependente da plataforma, gostaria muito de obter algumas referências de documentação; Eu realmente não sei o que procurar.