EXISTS
được sử dụng để trả về một giá trị boolean, JOIN
trả về toàn bộ bảng khác
EXISTS
chỉ được sử dụng để kiểm tra xem một truy vấn con có trả về kết quả hay không và đoản mạch ngay khi truy vấn đó xảy ra. JOIN
được sử dụng để mở rộng tập hợp kết quả bằng cách kết hợp nó với các trường bổ sung từ bảng khác có mối quan hệ với nó.
Trong ví dụ của bạn, các truy vấn tương đương nhau về mặt ngữ nghĩa.
Nói chung, hãy sử dụng EXISTS
khi nào:
- Bạn không cần trả lại dữ liệu từ bảng có liên quan
- Bạn có lỗi trong bảng liên quan (
JOIN
có thể gây ra các hàng trùng lặp nếu các giá trị được lặp lại) - Bạn muốn kiểm tra sự tồn tại (sử dụng thay vì
LEFT OUTER JOIN...NULL
tình trạng)
Nếu bạn có các chỉ mục thích hợp, hầu hết thời gian EXISTS
sẽ hoạt động giống hệt với JOIN
. Ngoại lệ là đối với các truy vấn con rất phức tạp, nơi thường sử dụng EXISTS
sẽ nhanh hơn .
Nếu JOIN
của bạn khóa không được lập chỉ mục, có thể nhanh hơn khi sử dụng EXISTS
nhưng bạn sẽ cần phải kiểm tra trường hợp cụ thể của mình.
JOIN
cú pháp cũng dễ đọc hơn và rõ ràng hơn bình thường.