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 .