Tôi đã có một truy vấn (cho Postgres và Informix) với một NOT INmệnh đề chứa một truy vấn con mà trong một số trường hợp trả về NULLcác giá trị, khiến mệnh đề đó (và toàn bộ truy vấn) không trả về bất cứ điều gì.
Cách tốt nhất để hiểu điều này là gì? Tôi đã nghĩ về NULLmột cái gì đó không có giá trị, và do đó không mong đợi truy vấn thất bại, nhưng rõ ràng đó không phải là cách nghĩ chính xác NULL.
x <> NULLlà giải quyếtFALSE, bạn sẽNOT (x <> NULL)đánh giáTRUEvà không. Cả hai đánh giáUNKNOWN. Thủ thuật là một hàng chỉ được chọn nếuWHEREmệnh đề (nếu có) ước tính thànhTRUE- một hàng bị bỏ qua nếu mệnh đề ước lượng thành mộtFALSEhoặcUNKNOWN. Hành vi này (nói chung và đối vớiNOT INvị từ nói riêng) được quy định bởi tiêu chuẩn SQL.