Es porque el parámetro 3 de su declaración de decodificación es NULL; según la documentación (mi énfasis).
Oracle convierte automáticamente expr y cada valor de búsqueda al tipo de datos del primer valor de búsqueda antes de comparar .... Si el primer resultado tiene el tipo de datos CHAR o si el primer resultado es nulo, Oracle convierte el valor devuelto al tipo de datos VARCHAR2 .
En su caso, el primer resultado es NULL, que Oracle trata como VARCHAR2. Su valor de retorno se convierte implícitamente en un VARCHAR2. Si cambiaste tu DECODE()
a lo siguiente obtendrías un número:
select decode(1, 0, 0, 0.75)
y podría lograr su NULL usando NULLIF()
función:
select nullif(decode(1, 0, 0, 0.75), 0) ...
Es mejor usar una instrucción CASE, que obliga a que todos los tipos de datos devueltos sean iguales:
select case 1 when 0 then null
else 0.75
end ...
1. en lo que también me han pillado.