Достаточно держать в памяти, что есть три варианта ответа - да/нет/что угодно (true/false/null), и тут же все станет понятно:
1) Да. "что угодно" = "что-то конкретное" дает "что угодно, потому-то слева может быть и правое значение, и любое другое.
2) Нет. См. п.1.
3) Нельзя, потому что п.1.
То есть, можно представить себе, что в null может быть любое значение - как равное конкретному, с которым мы сравниваем, так и не равное. Поэтому результат тоже может быть любым.
Собственно, этого мнемонического правила вполне достаточно, чтобы не делать ошибок при запросах к БД.
UPD: или же можно трактовать null как функцию random() - так еще понятней.
1) 1 = random()? А кто его знает - может, равно, а может, и нет... то есть ответ рандомный.
2) random() это false? Может, да, а может, и нет... в общем, все тот же рандом.
3) Из вышеизложенного вытекает, что любое сравнение какого-то конкретного значения с рандомным дает рандомный результат. А операторы IS NULL/IS NOT NULL как раз работают как "это рандом?" и "это не рандом?" - поэтому для работы с null надо использовать именно их.