When a NOT NULL column contains NULLs, isql reports these as zeroes (0, emptystring, etc.) to the user.
The heart of the problem is in the engine, which allows these illegal NULLs to exist in the first place, and in the way the API is set up (describing a column as NOT NULL through the same structure that is later used to fetch the output rows).
Still, a good client should be aware of this and always assume that a column may contain NULLs. In the case of illegal NULLs it's even more important that the user be aware of them, so s/he can do something about it. At present, most users assume that Firebird has somehow automatically applied a default value when they add a NOT NULL column or change an existing column to a NOT NULL domain. This leaves them with corrupted data, and unrestorable backups later.