SQL サーバーがこのように動作するのはなぜですか。これをSQL 2005で実行しています。
IN 句は、サブクエリの列名を検証しませんが、外側のクエリのテーブル名に対して検証します。これは取得の例です
Create table #table1(col1 int, col2 char(10), col3 char(15));
Create table #table2(col10 int, col11 char(10), col2 char(15));
insert into #table1(col1, col2, col3)
select 1, 'one', 'three'
insert into #table1(col1, col2, col3)
select 2, 'two', 'three'
insert into #table1(col1, col2, col3)
select 3, 'three', 'four'
insert into #table2(col10, col11, col2)
select 1, 'one', 'three'
insert into #table2(col10, col11, col2)
select 2, 'two', 'three'
insert into #table2(col10, col11, col2)
select 3, 'three', 'four'
select * from #table1
where col1 IN
(select col1 from #table2)
「select col1 from #table2」を選択して実行すると、エラーが発生します
Msg 207, Level 16, State 1, Line 1
Invalid column name 'col1'.