Dấu ngoặc đơn không thay đổi ngữ nghĩa. Vị trí của ON
mệnh đề điều khiển thứ tự xử lý logic các phép nối.
Truy vấn đầu tiên
SELECT Customer.Name,
Product.Desc,
Transaction.Date
FROM Product
INNER JOIN Transaction
ON Transaction.ProductID = Product.ID
INNER JOIN Customer
ON Transaction.CustomerID = Customer.ID
Truy vấn thứ hai
(Đã xóa dấu ngoặc đơn thừa)
SELECT Customer.Name,
Product.Desc,
Transaction.Date
FROM Product
INNER JOIN Transaction
INNER JOIN Customer
ON Transaction.CustomerID = Customer.ID
ON Transaction.ProductID = Product.ID
Vì vậy, về mặt logic trong ví dụ đầu tiên của bạn, tham gia vào Transaction, Product
xảy ra đầu tiên sau đó bảng ảo kết quả từ đó được kết hợp với Customer
, trong khi trong ví dụ thứ hai của bạn, tham gia vào Transaction, Customer
xảy ra đầu tiên sau đó bảng ảo kết quả từ đó được kết hợp với Product
Điều này chỉ về mặt logic và vì các phép nối bên trong vừa là kết hợp vừa có tính chất giao hoán, điều này có thể sẽ không tạo ra bất kỳ sự khác biệt nào đối với kế hoạch thực thi (trừ khi bạn thêm OPTION (FORCE ORDER)
đối với truy vấn) nhưng nó có thể làm được đối với các phép nối bên ngoài.
Đây là được Itzik Ben Gan đề cập tại đây nhưng bài viết có một số điểm không chính xác, hãy xem thư tiếp theo của Lubor Kollar nữa.