no dudo que la función funcione (valga la redundancia). Tal como comentó
Kafu, tiene que ver con el orden de evaluación.
Si Firebird evalua la función antes de hacer el encuentro externo (left/right join), devolverá 'cadena' solamente para aquellas filas que tengan un valor nulo almacenado en la tabla, y al hacer el encuentro, seguirán apareciendo con nulo aquellas para las que no haya habido una fila correspondiente. Exactamente las que son la razon de ser del encuentro externo.
Por el contrario, si primero se realiza el join, y luego se evalua la función, está deberá sustituir por 'cadena' todas aquellas filas que contengan NULL en ese momento. Es decir, por igual aquellas para las que el valor sea NULL en la tabla base, como aquellas que tengan NULL porque no existe un registro en la tabla.
Espero haberme explicado... y que haya alguien que tenga Firebird y haga un par de pruebas, para saber de que manera funciona.
Hasta luego.