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 .