Uma declaração CASE e um DECODE equivalente?
Parece que a simples expressão CASE e a função DECODE são equivalentes e que os resultados retornados por eles devem ser idênticos. São eles?
A documentação tem o seguinte a dizer sobre osimples expressão CASE:
A expressão CASE simples retorna o primeiro resultado para o qual selector_value corresponde ao seletor. Expressões restantes não são avaliadas. Se nenhum selector_value corresponder ao seletor, a expressão CASE retornará else_result, se existir e NULL, caso contrário.
Comparando isso com oFunção DECODE, as descrições parecem ser idênticas.
DECODE compara expr a cada valor de pesquisa um por um. Se expr for igual a uma pesquisa, o Oracle Database retornará o resultado correspondente. Se nenhuma correspondência for encontrada, o Oracle retornará o padrão. Se o padrão for omitido, o Oracle retornará nulo.
Enquanto orevista expressão CASE pode ser equivalente ao simples, isso pode ser interpretado como o mesmo.
Todas essas três instruções parecem retornar o mesmo resultado, 0.
select case 1 when 2 then null else 0 end as simple_case
, case when 1 = 2 then null else 0 end as searched_case
, decode(1, 2, null, 0) as decode
from dual
A expressão simples CASE e a função DECODE (e em circunstâncias específicas a expressão CASE pesquisada) sempre retornam o mesmo resultado?