У меня была странная ошибка, когда я сделал что-то вроде следующего:
SELECT *
FROM table1
WHERE NAME COLLATE LATIN1_General_CI_AS NOT IN (select name FROM table2)
Name
было nvarchar(50)
null
. Table2
имеет null
значений в столбце name
. Затем он будет сопоставлять имена, которые не существуют в table2
из-за значений null
. Это означает, что это вернет 0
результатов. И если бы я сделал:
SELECT *
FROM table1
WHERE NAME COLLATE LATIN1_General_CI_AS NOT IN (
select name FROM table2 where name is not null
)
Я бы получил некоторые результаты.
На одном столе было сопоставление Danish_Norwegian_CI_AS
, а на другом latin1
. Может быть, COLLATE
является источником проблемы?
Может кто-нибудь объяснить, почему это происходит? Может быть, что-то с теорией множеств?