Los NULL son un poco extraños. Un NULL es nunca igual a cualquier cosa incluyendo otro NULL. Además, cualquier operación booleana contra NULL devuelve NULL.
La expresión end IS NOT NULL
evaluará false
si end
es NULL y true
si end
no es NULL.
La expresión NOT( end=NULL)
en realidad siempre se evaluará como NULL porque (end = NULL)
es igual a NULL y NOT (NULL)
también es igual a NULL. Más concretamente en una cláusula WHERE, nunca evaluar true
.