"Wenn der Nenner eines Bruchs eine Dezimal-Zahl ist, wird intern automatisch in Float umgewandelt."
Wo steht das?
Es gibt da explizit Dezimalregeln, deshalb kann man auch per Option den Bereich von 31 auf 63 Stellen erweitern.
Double hat eine maximale Genauigkeit von 17 Stellen, somit würden Dezimal-Ergebnisse verfälscht.
Wenn bei einer komplexeren Formel Genauigkeit verloren geht, gibts nämlich einen Joblog-Eintrag sowie eine Warnung an das Programm mit einem entsprechenden SQLSTATE.
Ein expliziter Cast eines Divisors in höhere Genauigkeit verschärft das Problem zusaätzlich.

https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/db2/rbafzdecarithmetic.htm

Was wohl korrekt ist:
Ist ein Operand Double/Float wird der gesamte Ausdruck als Double berechnet.

Zusätzlich hat ein Cast nichts mit der NULL-Problematik zu tun.
Die Frage ist lediglich, ob ASUMF2 bereits NULL enthalten kann und ggf. in COALESCE zu packen wäre.

Was den Konstantenwert im Coalesce angeht, so wird das Ergebnis nach den Rechenregeln automatisch angepasst:
coalesce(dec(1, 11, 2), 0) => dec(11, 2)
coalesce(dec(1, 11, 2), 0.000) => dec(12, 3)
usw.
Es reicht daher im Allgemeinen die Konstante 0 zu verwenden.

Natürlich gibt es noch die Integer-Regel:
Sind alle Operatoren ohne Dezimale, wird eine Integer-Operation durchgeführt.
Allerdings muss die Ganzzahl auch in einen passenden Integer-Typ castbar sein.