SQL Select retieves the values from the tables opening them again, and if you use table buffering you have to do a TableUpdate() before run your SQL Select, this happen with any value not only with NULL
Really allowing null values is the best way to do what you want.
And on your report use NVL, like this: NVL(query.field,"?") or
NVL(query.field,0) or any type of value you want to return.
Hope this help
Mauricio
Be fast like the Fox
Be free like the Penguin
Se Rápido como el Zorro
Se libre como el Pingüino