Bueno, no estoy seguro si esto es mejor , pero podría ser un poco más conciso usar LNNVL
, una función (que solo puedes usar en un WHERE
cláusula) que devuelve TRUE
si una expresión dada es FALSE
o DESCONOCIDO (NULL
). Por ejemplo...
WITH T AS
(
SELECT 1 AS X, 1 AS Y FROM DUAL UNION ALL
SELECT 1 AS X, 2 AS Y FROM DUAL UNION ALL
SELECT 1 AS X, NULL AS Y FROM DUAL UNION ALL
SELECT NULL AS X, 1 AS Y FROM DUAL
)
SELECT
*
FROM
T
WHERE
LNNVL(X <> Y);
... devolverá todo menos la fila donde X =1 e Y =2.