Sim, é assim que o Oracle funciona. Strings vazias são tratadas como nulas.
É claro que você pode "corrigir" isso no nível do aplicativo - por exemplo, armazenando
" "
valores como você sugeriu - mas primeiro considere, qual é exatamente a diferença com seus valores de "string vazia" em comparação com NULL
valores? Por que você precisa tratá-los de forma diferente? Eu costumava me deparar com esse dilema também, mas geralmente descobri que existem muito poucos casos em que eu realmente preciso dizer a diferença.