以下の DDL を参照してください。
CREATE TABLE TestTable(id int, [name] varchar(30))
CREATE TABLE TestTable2(id int, [name] varchar(30))
INSERT INTO TestTable (id,[name]) values (1,'')
INSERT INTO TestTable (id,[name]) values (2,'Martin')
INSERT INTO TestTable2 (id,[name]) values (1,null)
INSERT INTO TestTable2 (id,[name]) values (2,'Martin')
select TestTable.* from TestTable
LEFT JOIN TestTable2
ON TestTable.id=TestTable2.id
and TestTable.[name]= TestTable2.[Name] and NOT (TestTable.[name] ='' and TestTable2.[name] is null)
where testtable2.id is null
SELECT は 1 行を返しますが、何も返さないと思います。何も返さないと予想する理由は、以下の SQL ステートメントが何も返さないのと同じ理由です。
select TestTable.* from TestTable
LEFT JOIN TestTable2
ON TestTable.id=TestTable2.id
and TestTable.[name]= TestTable2.[Name]
where testtable2.id is null and NOT (TestTable.[name] ='' and TestTable2.[name] is null)
最初の SQL ステートメントが 1 行を返すのはなぜですか? ON 句は、NOT (TestTable.[name] ='' and TestTable2.[name] is null) という条件でこれらのレコードをファイリングする必要があります。返される 1 行には、この基準が含まれています。なんで?