Hay una gran diferencia entre DECODE y CASE y tiene que ver con cómo NULLs se comparan. DECODE devolverá "verdadero" si compara NULL a NULL . CASE no lo haré Por ejemplo:
DECODE(NULL, NULL, 1, 0)
devolverá '1'.
CASE NULL
WHEN NULL THEN 1
ELSE 0
END
devolverá '0'. Tendrías que escribirlo como:
CASE
WHEN NULL IS NULL THEN 1
ELSE 0
END