oracle 10g – How are these NULL values ​​stored in a NOT NULL column?

We replicate SAP ECC 6.0 tables on HANA in an Oracle 10g warehouse, using SAP SLT.
From the beginning, we noticed the NOT NULL HANA column definitions are kept in Oracle copies of tables, but HANA stores many values ​​as empty strings. Oracle stores empty strings as NOs and somehow this does not conflict with the NOT NULL column definition (that is, we have NO in a column defined as NOT NULL).

Querying these tables produces strange results:

SELECT COUNT (*) FROM warehouse.table WHERE pass IS NULL;
0
SELECT COUNT (*) FROM warehouse.table WHERE col = & # 39 ;;
0
SELECT COUNT (*) FROM warehouse.table GROUP BY NVL (col, & # 39; N);
X 24986
N 390986

So we can say that there are NO the values ​​in these columns using NVL or DECODE functions, but their query returns odd results.

We get the correct results when we change the column:

ALTER TABLE warehouse.table MODIFY (NULL Pass);
Table modified.
SELECT COUNT (*) FROM warehouse.table WHERE pass IS NULL;
390986

But of course, we can not change the column:

ALTER TABLE warehouse.table MODIFY (NOT NULL);
ERROR at line 1:
ORA-02296: Can not Enable (Warehouse) - Null Values ​​Found

I can not say it's a problem related to Oracle's implementation of empty channel storage, or maybe just an oddity of interaction with the SLT replication from SAP. It seems that Oracle should not allow these lines with & # 39; & # 39; or NO The values ​​that replication is trying to place them there but we have not seen any error indicating it.