Czy instrukcja CASE i odpowiednik DECODE?

Wygląda na to, że proste wyrażenie CASE i funkcja DECODE są równoważne i wyniki zwracane przez nie powinny być identyczne. Czy oni są?

Dokumentacja zawiera następujące informacje na tematproste wyrażenie CASE:

Proste wyrażenie CASE zwraca pierwszy wynik, dla którego wartość selector_value odpowiada selektorowi. Pozostałe wyrażenia nie są oceniane. Jeśli żadna wartość selector_value nie odpowiada selektorowi, wyrażenie CASE zwraca else_result, jeśli istnieje, i NULL w przeciwnym razie.

Porównując to doFunkcja DECODE, opisy wydają się być identyczne.

DECODE porównuje wyrażenie z każdą wartością wyszukiwania po kolei. Jeśli wyrażenie jest równe wyszukiwaniu, wówczas baza danych Oracle zwraca odpowiedni wynik. Jeśli nie znaleziono dopasowania, Oracle zwraca wartość domyślną. W przypadku pominięcia wartości domyślnej Oracle zwraca wartość null.

Jakoprzeszukano wyrażenie CASE może być równoznaczne z prostym, może to być również takie samo.

Te trzy stwierdzenia wydają się zwracać ten sam wynik, 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

Czy proste wyrażenie CASE i funkcja DECODE (aw określonych okolicznościach wyszukiwane wyrażenie CASE) zawsze zwracają ten sam wynik?

questionAnswers(3)

yourAnswerToTheQuestion