サブクエリで存在しない列参照を使用したときにエラーが発生しない次のクエリがあります。サブクエリで参照した列は、実際には更新中のテーブルの列です。
create table tbl1 (f1 bigint, f2 char(10), f3 integer);
insert into tbl1 values (1, 'aa', 0);
insert into tbl1 values (2, 'bb', 0);
insert into tbl1 values (3, 'cc', 0);
insert into tbl1 values (4, 'dd', 0);
create table temp_tbl (ref_num bigint);
insert into temp_tbl values (1);
insert into temp_tbl values (3);
update tbl1 set f2='ok' where f1 in (select f1 from temp_tbl);
-- 4 records updated
エラーが発生しない理由を誰かに教えてもらえますか? 記録は条件に関係なく更新されます。
OracleとSQLserverの両方でこれを試しました。結果は同じ