teoria pytanie ...Gdzie Klauzula Odrzucanie wiersze NULL jeśli wystąpił
Kiedy zestaw zapytań podane poniżej jest zwolniony wtedy ...
Create table Temp1(C1 varchar(2))
Create table Temp2(C1 varchar(2))
insert into Temp1 Values('A'),(NULL),('B')
insert into Temp2 Values('B'),(NULL),('C'),(NULL)
select *from Temp1 A,Temp2 B
where A.C1 <> B.C1
... daje ...
użyłem A.C1 <> B.C1
w klauzuli Where
.
Ale spodziewam ...
Aby spodziewany rezultat jako wyjście Musiałem użyć ISNULL(A.C1,'') <> ISNULL(B.C1,'')
w klauzuli Where
.
Moje pytanie brzmi: dlaczego muszę używać ISNULL
za każdym razem, aby uzyskać dane wyjściowe zgodnie z oczekiwaniami, ponieważ NULL
nie jest równe żadnym ciągom danych.
Ponieważ wartość null ma specjalne znaczenie bez wartości. wszelkie porównania, w których jedna strona ma wartość null, przyniosą wartość zerową i staną się wartościami false - przeczytaj tutaj http://msdn.microsoft.com/en-us/library/ms191504(v=sql.105).aspx –
Wszystko w porównaniu do 'NULL' zawsze zwraca 'NULL' (nieznany), który nie jest ani prawdziwy, ani fałszywy i dlatego nie może spełnić twoich kryteriów. –