Đối với các kết nối bên trong tôi không thực sự nhận thấy sự khác biệt (nhưng như với tất cả các điều chỉnh hiệu suất, bạn cần kiểm tra đối với cơ sở dữ liệu của bạn trong các điều kiện của bạn).
Tuy nhiên, nơi bạn đặt điều kiện sẽ tạo ra một sự khác biệt rất lớn nếu bạn đang sử dụng các phép nối trái hoặc phải. Ví dụ, hãy xem xét hai truy vấn sau:
SELECT *
FROM dbo.Customers AS CUS
LEFT JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
WHERE ORD.OrderDate >'20090515'
SELECT *
FROM dbo.Customers AS CUS
LEFT JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
AND ORD.OrderDate >'20090515'
Đầu tiên sẽ chỉ cung cấp cho bạn những hồ sơ có đơn đặt hàng muộn hơn ngày 15 tháng 5 năm 2009, do đó chuyển đổi tham gia bên trái thành tham gia bên trong. Thứ hai sẽ cung cấp cho các hồ sơ cộng với bất kỳ khách hàng không có đơn đặt hàng. Các kết quả được đặt rất khác nhau tùy thuộc vào nơi bạn đặt điều kiện. (Chọn * nếu chỉ nhằm mục đích, bạn không nên sử dụng khóa học trong mã sản xuất.) Ngoại lệ cho điều này là khi bạn muốn chỉ xem các bản ghi trong một bảng chứ không phải bảng khác. Sau đó, bạn sử dụng mệnh đề where cho điều kiện không tham gia.
SELECT *
FROM dbo.Customers AS CUS
LEFT JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
WHERE ORD.OrderID is null