"St. Alex" ...
>
> >    Патамушта любое сравнение с null даёт false.
> >Это проходят в первом классе, ей-богу...
>
> Я знаю, что любое сравнение с нулл дает ложь. поэтому меня и смутило,
> что когда я пишу id not in (null, 1,2,2,1) у меня получается пустой
> результат.
> null,1,2,2,1 - результат выполнения подзапроса
> Ведь по матeматической логике данное выражение преобразовывается в
> not (id in (null,1,2,2,1)) -> not (id=null or id=1 or id=2),

    Нет, не так. Это несколько другая логика, не двоичная.

> например,
> для id=3 пполучаем:
> not (3=null or 3=1 or 3=2) -> not(flase or false or false) для id=3
> результат должен быть возвращен в ответе?
> а если написать id not in (1,2,2,1) то возвращаются результаты 3, 4, 5

    X op NULL, NOT X op NULL всегда даст false.

Иначе бы результаты зависели от способа преобразования выражения :

not x in (null, 1) ==

a) not (x = null or x = 1) ==
   not (false or x = 1) ==
   not (x = 1)  ==
   (x != 1)

b) not (x = null or x = 1) ==
   (x != null) and (x != 1) ==
   false and (x != 1) ==
   false

    Как видишь, применяя обычную логику, получаем разные результаты,
в зависимости от того преобразования, которое мы выбрали.

-- 
Хорсун Влад


Ответить