In (Null)という条件ではNullを抽出できない

 In演算子の後のカッコの中にNullを含めても、Nullを抽出することはできません。
 一方でNot Inのカッコ内にNullを含めた場合はNullを除外して抽出することができます。
 後者は一般的なデータベースとは異なる挙動のようですが、とにかくAccessにおける実際のところを見てみます。

f:id:accs2014:20180609115723p:plain:right:w300

 サンプルはこのようなテーブルです。


f:id:accs2014:20180609115720p:plain:right:w400

 クエリでの抽出条件として、価格列に「In (Null)」と指定してみます。
 価格がNullである2つのレコードが抽出されてもよさそうなものですが…


f:id:accs2014:20180609115717p:plain:right:w300

 実際にはレコードは1つも抽出されません。


f:id:accs2014:20180609115833p:plain:right:w300

 こちらは価格列の抽出条件として「In (Null,300,400)」と指定した結果です。
 300と400に該当する2つのレコードは抽出されていますが、Nullのレコードはやはり抽出されません。


f:id:accs2014:20180609115714p:plain:right:w400

 次にNot Inの例です。価格列に「Not In (Null)」と指定してみます。


f:id:accs2014:20180609115712p:plain:right:w300

 価格がNullでない5つのレコードが抽出されました。


f:id:accs2014:20180609115830p:plain:right:w300

 さらに価格列の抽出条件として「Not In (Null,300,400)」と指定した結果です。価格がNullでもなく300でもなく400でもない3つのレコードが抽出されています。
 もっとも、この結果は「Not In (300,400)」としたときの結果と変わりありません。

 いずれIn (Null)の結果のことを考えると不思議な気がしますが、こういうものとして受け入れるしかありません。参考まで。