Với một phép nối bên trong, sự khác biệt chỉ là sự khác biệt về ngữ nghĩa. Cả hai truy vấn phải tạo ra cùng một kế hoạch truy vấn chính xác và cùng một kết quả.
Tuy nhiên, khi bạn đang sử dụng các phép nối bên ngoài, thì vấn đề quan trọng là nếu điều kiện nằm trên where
mệnh đề hoặc on
điều khoản trên.
UPDATE li
SET li.Description = im.Description
FROM tbSupplierLineItem li
RIGHT JOIN tbIMPACArchieveNew im ON li.ItemId = im.CommomCode
AND li.ProcessedDate >= CONVERT(DATE,GETDATE())
Khác với
UPDATE li
SET li.Description = im.Description
FROM tbSupplierLineItem li
RIGHT JOIN tbIMPACArchieveNew im ON li.ItemId = im.CommomCode
WHERE li.ProcessedDate >= CONVERT(DATE,GETDATE())
không chỉ ở cấp độ ngữ nghĩa.
Trong khi truy vấn đầu tiên sẽ trả về kết quả mong đợi của một phép nối phải, thì truy vấn thứ hai sẽ trả về kết quả mong đợi từ một phép nối bên trong.
Đó là vì các giá trị bảng bên phải có thể là null nếu bạn có các bản ghi trên bảng bên trái không khớp với chúng và vì so sánh bất kỳ giá trị nào với null (bao gồm cả một giá trị khác) sẽ dẫn đến sai, nên về cơ bản, nó sẽ thay đổi phép nối bên phải thành một phép nối bên trong.