sql >> Base de Datos >  >> RDS >> PostgreSQL

Declaración IN de Postgresql

Este comportamiento es correcto según los estándares ANSI.

Si el nombre de columna no calificado no se resuelve en el ámbito interno, se considerará el ámbito externo. Entonces, efectivamente, está haciendo una subconsulta correlacionada no intencional.

Siempre que la tabla profile contiene al menos una fila entonces

 FROM users
 WHERE user_id IN (
        SELECT user_id FROM profile
        )

terminará haciendo coincidir todas las filas en users (excepto donde users.user_id IS NULL como WHERE NULL IN (NULL) no se evalúa como verdadero). Para evitar este posible problema, puede usar nombres de dos partes.

DELETE FROM users
WHERE  user_id IN (SELECT p.user_id
                   FROM   profile p) 

Daría el error