Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Filtrando JOINs:WHERE vs. ON


O link @Gratzy fornecido é útil

A distinção entre condições na cláusula ON e na cláusula WHERE é certamente cinzenta.

Para INNER JOINS eles são equivalentes. Para OUTER JOINS, seu entendimento está correto de que a cláusula WHERE é aplicada conceitualmente após a condição ON ter sido avaliada.

Mas, em muitos casos, a diferença está mais na intenção do que na funcionalidade. Muitas vezes há uma diferença semântica entre as condições ON e a cláusula WHERE.

Por exemplo, versões mais antigas do SQL Server realmente implementaram a sintaxe ON usando condições na cláusula WHERE, empregando um *= ou =* sintaxe para implicar junções LEFT ou RIGHT (o que levou a resultados estranhamente sutilmente diferentes dos equivalentes LEFT e RIGHT JOIN em alguns casos)

Em geral, meu conselho é sempre usar os campos-chave apropriados na cláusula ON para unir registros com base na lógica de como os registros se associam. Use a cláusula WHERE para aplicar condições de filtragem que restringem progressivamente esse conjunto de resultados.