La lien fourni par @Gratzy est utile
La distinction entre les conditions dans la clause ON et la clause WHERE est certainement grise.
Pour INNER JOINS, ils sont équivalents. Pour OUTER JOINS, vous comprenez bien que la clause WHERE est conceptuellement appliquée après que la condition ON a été évaluée.
Mais dans de nombreux cas, la différence tient davantage à l'intention qu'à la fonctionnalité. Il existe souvent une différence sémantique entre les conditions ON et la clause WHERE.
Par exemple, les anciennes versions de SQL Server implémentaient réellement la syntaxe ON en utilisant des conditions dans la clause WHERE, en utilisant un *=
ou =*
syntaxe pour impliquer des jointures LEFT ou RIGHT (ce qui a conduit à des résultats étrangement subtilement différents des équivalents LEFT et RIGHT JOIN dans certains cas)
En général, mon conseil est toujours d'utiliser les champs clés appropriés dans la clause ON pour joindre des enregistrements en fonction de la logique de la façon dont les enregistrements s'associent les uns aux autres. Utilisez la clause WHERE pour appliquer des conditions de filtrage qui restreignent progressivement cet ensemble de résultats.