This one is certainly a nasty issue, if we are going to use DEX_ROW_ID value on customization or integration.
I have personally fallen into a trap by using DEX_ROW_ID on my customization. But now, it’s all wisdom out of that bad experience.
Only time when I normally depend on a DEX_ROW_ID is to sort records to understand which record was entered last in the table. That itself may not be always correct. So we may have to add other logical fields that are relevant to a particular record.
For instance, if I have to list out transactions entered on a particular day and check in the order in which the records are created, I would use the Transaction Date and DEX_ROW_ID as SORT ORDER.
There are many other reasons, but restrict yourself to use DEX_ROW_ID only for selecting records and analyze it.