KB> Hi Константин !
К>> select 'OK' from rdb$database where 0 not in (1,2) К>> select 'OK' from rdb$database where not ((0 = 1) or (0 = 2)) = true KB> 3-я строчка так: KB> select 'OK' from rdb$database where (0 <> 1) *AND* (0 <> 2) = true KB> и соответственно 4-я тоже неправильно Блин, хорошо, соглавен, неправ ..., НО .. Выдержка из: http://www.firebirdsql.org/manual/ru/nullguide-dealing-with-nulls-ru.html {Цытата} Однако откажитесь от идеи инвертирования выражения и использования его как проверки на неэквивалентность (как я это однажды сделал): /* Не делайте так! */ if (not(A = B or A is null and B is null)) then ...код для выполнения, если A отличается от B... Приведенный выше код работает корректно, если оба A и B являются NULL или оба не являются NULL. Но в нем не выполняется предложение then, если только одна из частей (A или B) является NULL. Если вы хотите выполнять что-либо, когда A и B отличаются, вы должны либо использовать корректное выражение, приведенное выше, и поместить пустой оператор в предложение then, или использовать это более длинное выражение для проверки: /* Это корректный тест на неэквивалентность: */ if (A <> B or A is null and B is not null or A is not null and B is null) then... {/Цытата} Что-то много противоречий ... Подобного кода в разложении not in я не встретид ... Где правда ? PS: Я в конец запутался ... Хрен с ним ... Уж обошёл ... Но ... С уважением, Константин Григорьевич. ===============