If you really wanted to, in Haskell you could do something like:
data AdvancedMaybe a = Just a | Nothing | PassiveNothing
I think Allowing "empty" values, and not allowing Null would be better.
If SQL had Option (Maybe) branch matching it would be an interesting replacement, and then coalesce would not be needed.
SELECT id, MATCH k WITH ( SOME(k) THEN k, NONE THEN default, END) AS something FROM ...
Just spitballing for fun on what it might look like.