SQL Server によると、Null は SQL 内のものと同等ではありませんが、次のクエリは注文されたすべての製品を返します。
Select * from products 
where exists (select null from orderdetails 
where orderdetails.product_id = products.product_id
SQL Server によると、Null は SQL 内のものと同等ではありませんが、次のクエリは注文されたすべての製品を返します。
Select * from products 
where exists (select null from orderdetails 
where orderdetails.product_id = products.product_id
行の存在をテストします。値はチェックしません。where exists (select * ...)またはを使用できますwhere exists(select 1 ...)。違いはありません。
Exists含まれているステートメントが行を返すかどうかをテストします。
これを順を追って説明します。
select null from orderdetails 
where orderdetails.product_id = products.product_id
null指定された product_id を持つ orderdetails テーブル内の各注文を含む行を返します。
exists (select null from orderdetails 
where orderdetails.product_id = products.product_id)
サブクエリが行を返す場合は true を返します (その product_id を持つ注文がテーブルにある場合は、 を含む行がありますnull)
Select * from products 
where exists (select null from orderdetails 
where orderdetails.product_id = products.product_id)
orderdetail テーブルに注文が存在するすべての製品を返します。
Exists サブクエリに行が含まれている場合は TRUE を返します。
あなたがしているのは、ヌルを選択することです。これはnullの行を返すため、条件はtrueになります
このexists句は存在をチェックします。つまり、サブクエリがデータを返すかどうかです。データ自体は気にしません。
existsサブクエリが何かを返す場合は true です。
の代わりにselect null、id、主キーを選択してみてください。