The record matching joincondition is processed internally as two parts:
"equality" (hard match) | All the simple "LEFT.field = RIGHT.field" logic that defines matching records. For JOINs that use keys, all these must be fields in the key to qualify for inclusion in this part. If there is no "equality" part to the joincondition logic, then you get a "JOIN too complex" error. |
"non-equality" (soft match) | All other matching criteria in the joincondition logic, such as "LEFT.field > RIGHT.field" expressions or any OR logic that may be involved with the final determination of which leftrecset and rightrecset records actually match. |
This internal logic split allows the JOIN code to be optimized for maximum efficiency--first the "equality" logic is evaluated to provide an interim result that is then evaluated against any "non-equality" in the matching joincondition.