A Theory Question ...Dove clausola Rifiutare righe se NULL è verificato
Quando una serie di query viene licenziato poi come dato di seguito ...
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
... dà ...
ho usato A.C1 <> B.C1
nella clausola Where
.
Ma mi aspetto ...
Per ottenere il risultato come output avevo bisogno di usare ISNULL(A.C1,'') <> ISNULL(B.C1,'')
nella clausola Where
previsto.
La mia domanda è perché ho bisogno di utilizzare ISNULL
ogni volta per ottenere l'output come previsto, come NULL
non è uguale a tutti i dati di stringa.
Perché null ha un significato speciale senza valore. qualsiasi confronto in cui una parte è nullo genererà null e valuterà in falso - leggi qui http://msdn.microsoft.com/en-us/library/ms191504(v=sql.105).aspx –
Qualcosa rispetto a 'NULL' restituisce sempre 'NULL' (sconosciuto) che non è né vero né falso e quindi non può soddisfare i tuoi criteri. –