Beh, non sono sicuro che sia meglio , ma potrebbe essere leggermente più conciso usare LNNVL
, una funzione (che puoi usare solo in un WHERE
clausola) che restituisce TRUE
se una determinata espressione è FALSE
o SCONOSCIUTO (NULL
). Ad esempio...
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);
...restituirà tutto tranne la riga dove X =1 e Y =2.