If a file is defined as update and the N operation extender is not specified, occasionally a READE operation will be forced to wait for a temporary record lock for a record whose key value does not match the search argument.
the key of the current record is not the same as the search argument

Dieses Verhalten war aber schon immer so und hat mit deinem NULL-Problem nichts zu tun.
Der READE macht da nun mal immer einen Lock (außer bei EOF).
Nur wenn der Schlüssel nicht passt, erfolgt ein Unlock und setzen des EOF.

Willst du das so nicht, benötigst du einen READE(N) und wenn nicht EOF einen zusätzlichen Chain für die nun nötige Sperre.
Per SQL läft das ja im Prinzip genauso:

Select .... where ....
macht keinen Sperre. Erst der spätere Update macht dann eine Sperre, was nun durchaus zu konkurierenden Updates führen wird wenn es denn konzeptionell nicht berücksichtigt wird.

Ausnahme entsprechend mit Commit.Modus sowie "Select ... for update".