liên kết @Gratzy đã cung cấp hữu ích
Sự phân biệt giữa các điều kiện trong mệnh đề ON và mệnh đề WHERE chắc chắn là một màu xám.
Đối với INNER JOINS, chúng tương đương nhau. Đối với OUTER JOINS, bạn hiểu đúng rằng mệnh đề WHERE được áp dụng về mặt khái niệm sau khi điều kiện BẬT đã được đánh giá.
Nhưng trong nhiều trường hợp, sự khác biệt phụ thuộc vào mục đích hơn là chức năng. Thường có sự khác biệt về ngữ nghĩa giữa điều kiện ON và mệnh đề WHERE.
Ví dụ:các phiên bản cũ hơn của SQL Server thực sự đã triển khai cú pháp ON bằng cách sử dụng các điều kiện trong mệnh đề WHERE, sử dụng *=
hoặc =*
cú pháp để ngụ ý các phép nối LEFT hoặc RIGHT (dẫn đến các kết quả khác nhau một cách kỳ lạ tạo thành các phép tương đương LEFT và RIGHT JOIN trong một số trường hợp)
Nói chung, lời khuyên của tôi là luôn sử dụng các trường khóa thích hợp trong mệnh đề ON để nối các bản ghi dựa trên logic về cách các bản ghi liên kết với nhau. Sử dụng mệnh đề WHERE để áp dụng các điều kiện lọc hạn chế dần tập hợp kết quả này.