осигурена връзка с @Gratzy е полезно
Разликата между условията в клаузата ON и клаузата WHERE със сигурност е сива.
За INNER JOINS те са еквивалентни. За OUTER JOINS вашето разбиране е правилно, че клаузата WHERE се прилага концептуално, след като условието ON е оценено.
Но в много случаи разликата се свежда повече до намерението, отколкото до функционалността. Често има семантична разлика между условията ON и клаузата WHERE.
Например, по-старите версии на SQL Server наистина прилагаха синтаксиса ON, използвайки условия в клаузата WHERE, използвайки *=
или =*
синтаксис за подразбиране на ЛЯВИ или ДЯСНИ съединявания (което доведе до странно едва доловимо различни резултати от еквивалентите на ЛЯВИ и ДЕСНИ JOIN в някои случаи)
Като цяло моят съвет е винаги да използвате подходящите ключови полета в клаузата ON, за да обединявате записи въз основа на логиката на това как записите се асоциират един с друг. Използвайте клаузата WHERE, за да приложите условия за филтриране, които постепенно ограничават този набор от резултати.