De link @Gratzy verstrekt is nuttig
Het onderscheid tussen voorwaarden in de ON-clausule en de WHERE-clausule is zeker een grijze.
Voor INNER JOINS zijn ze equivalent. Voor OUTER JOINS heb je gelijk dat de WHERE-clausule conceptueel wordt toegepast nadat de ON-voorwaarde is geëvalueerd.
Maar in veel gevallen zit het verschil meer in opzet dan in functionaliteit. Er is vaak een semantisch verschil tussen de ON-voorwaarden en de WHERE-clausule.
Oudere versies van SQL Server hebben bijvoorbeeld de ON-syntaxis echt geïmplementeerd met behulp van voorwaarden in de WHERE-clausule, met een *=
of =*
syntaxis om LEFT- of RIGHT-joins te impliceren (wat in sommige gevallen leidde tot vreemd subtiel verschillende resultaten van de LEFT- en RIGHT JOIN-equivalenten)
Over het algemeen is mijn advies om altijd de juiste sleutelvelden in de ON-clausule te gebruiken om records samen te voegen op basis van de logica van hoe de records met elkaar omgaan. Gebruik de WHERE-component om filtervoorwaarden toe te passen die deze resultatenset geleidelijk beperken.