Hai truy vấn giống nhau, ngoại trừ câu thứ hai là cú pháp ANSI-92 SQL và câu thứ nhất là cú pháp SQL cũ hơn không kết hợp mệnh đề nối. Họ phải tạo chính xác cùng một kế hoạch truy vấn nội bộ, mặc dù bạn có thể muốn kiểm tra.
Bạn nên sử dụng cú pháp ANSI-92 vì một số lý do
- Việc sử dụng mệnh đề JOIN sẽ tách logic quan hệ ra khỏi logic lọc (WHERE) và do đó rõ ràng hơn và dễ hiểu hơn.
- Điều đó không quan trọng với truy vấn cụ thể này, nhưng có một số trường hợp trong đó cú pháp nối bên ngoài cũ hơn (sử dụng +) không rõ ràng và kết quả truy vấn do đó phụ thuộc vào việc triển khai - hoặc không thể giải quyết được truy vấn. Những điều này không xảy ra với ANSI-92
- Đó là một phương pháp hay vì ngày nay hầu hết các nhà phát triển và dba sẽ sử dụng ANSI-92 và bạn nên tuân theo tiêu chuẩn này. Chắc chắn tất cả các công cụ truy vấn hiện đại sẽ tạo ANSI-92.
- Như @gbn đã chỉ ra, nó có xu hướng tránh các kết hợp chéo ngẫu nhiên.
Bản thân tôi, tôi đã chống lại ANSI-92 một thời gian vì có một chút lợi thế về khái niệm đối với cú pháp cũ vì nó dễ dàng hơn để hình dung SQL như một phép nối Descartes hàng loạt của tất cả các bảng được sử dụng sau một hoạt động lọc - một kỹ thuật tinh thần có thể hữu ích để nắm được truy vấn SQL đang làm gì. Tuy nhiên, cách đây vài năm tôi đã quyết định rằng tôi cần phải di chuyển theo thời gian và sau một khoảng thời gian điều chỉnh tương đối ngắn, giờ tôi thực sự thích nó hơn - chủ yếu là vì lý do đầu tiên được đưa ra ở trên. Vị trí duy nhất mà người ta nên khởi hành từ cú pháp ANSI-92, hay đúng hơn là không sử dụng tùy chọn, là với các phép nối tự nhiên, ẩn chứa nguy hiểm.