Hành vi này đúng theo tiêu chuẩn ANSI.
Nếu tên cột không đủ tiêu chuẩn không giải quyết được trong phạm vi bên trong thì phạm vi bên ngoài sẽ được xem xét. Vì vậy, hiệu quả là bạn đang thực hiện một truy vấn phụ tương quan không chủ ý.
Miễn là bảng profile
chứa ít nhất một hàng sau đó
FROM users
WHERE user_id IN (
SELECT user_id FROM profile
)
sẽ kết thúc khớp với tất cả các hàng trong users
(ngoại trừ bất kỳ nơi nào users.user_id IS NULL
dưới dạng WHERE NULL IN (NULL)
không đánh giá đúng). Để tránh vấn đề có thể xảy ra này, bạn có thể sử dụng hai tên bộ phận.
DELETE FROM users
WHERE user_id IN (SELECT p.user_id
FROM profile p)
Sẽ đưa ra lỗi