Как насчет этой опции. Я думаю, что это может сработать, если ваше значение никогда не равно нулю.
where not (value = column)
, что приведет к следующей таблице истинности для оценки для предложения where
col1
| 'bla' | null |
-----------------
| 'bla' | F | T |
value -------------------------
| null | T | *T |
* это единственное, что "неправильно", но это нормально, поскольку наше значение никогда не равно нулю
Обновление
Хорошо, я только что опробовал свою идею, и она провалилась. Я оставлю здесь ответ, чтобы сэкономить время других, пытающихся сделать то же самое. Вот мои результаты:
select 'x', 'x' from dual where not ('x' = 'x');
0 rows
select 'x', 'y' from dual where not ('x' = 'y');
1 row
select 'x', 'null' from dual where not ('x' = null);
0 rows
select 'null', 'null' from dual where not (null = null);
0 rows
Обновление 2
Это решение работает, если ваше значение никогда не равно нулю (соответствует таблице истинности выше)
where ('blah' != col1 or col1 is null)
тесты здесь:
select 'x', 'x' from dual where ('x' != 'x' or 'x' is null);
0 rows
select 'x', 'y' from dual where ('x' != 'y' or 'y' is null);
1 row
select 'x', 'null' from dual where ('x' != null or null is null);
1 row
select 'null', 'null' from dual where (null != null or null is null);
1 row