NULLs são um pouco estranhos. Um NULL nunca igual a qualquer coisa incluindo outro NULL. Além disso, qualquer operação booleana em um NULL retorna NULL.
A expressão
end IS NOT NULL
avaliará false
se end
é NULL e true
se end
não é nulo. A expressão
NOT( end=NULL)
na verdade sempre será avaliado como NULL porque (end = NULL)
é igual a NULL e NOT (NULL)
também é igual a NULL. Mais especificamente, em uma cláusula WHERE, ela nunca avaliar true
.