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 (
JOINcó 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...NULLtì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.