where句ではなく、外部結合句でフィルターを使用してテーブルをフィルターで除外しようとしています。そうしようとすると、予期しない結果が得られます。フィルタをまったく適用しなかったかのように、テーブル全体が返されます。
この例を実行すると、最後の2つのクエリで異なる結果が得られます。同じ結果になると思いますが、そうではありません。ここで何が起こっているのですか?
declare @a table
(
id int
,content varchar(100)
)
declare @b table
(
id int
,content varchar(100)
)
insert into @a (id,content) values (1,'Apple')
insert into @a (id,content) values (2,'Banana')
insert into @a (id,content) values (3,'Orange')
insert into @b (id,content) values (1,'Juice')
insert into @b (id,content) values (2,'Peel')
insert into @b (id,content) values (3,'Julius')
--basic outer join
select * from @a a left join @b b on a.id=b.id
--outer join with where clause filter
select * from @a a left join @b b on a.id=b.id where a.id=1
--outer join with join clause filter
select * from @a a left join @b b on a.id=1 and a.id=b.id