Null join optimization leads to wrong results for outer joins
Details
| Detail name | Value |
|---|---|
| Changelog Number | 10687 |
| Type | Bug |
| Status | Resolved |
| Affected Versions | EXASOL 6.0.0, Exasol 6.1.0, Exasol 6.2.0, Exasol 7.0.0 |
| Fix Versions | Exasol 7.0.1, Exasol 6.2.11, Exasol 6.1.13 |
| Resolution Date | 2020-09-23 |
Description
Exasol uses a special optimization for inner joins with join conditions such as
--null join select * from t1 inner join t2 on t1.id=t2.id or (t1.id is null and t2.id is null)
This optimization is also erroneously applied to outer joins, which leads to incorrect results.
Workaround
You can disable this optimization via a parameter:
-enableNullJoinOptimization=0
Alternatively, you can use coalesce in the join condition to prevent the optimization:
on t1.id=t2.id or (coalesce(t1.id, null) is null and coalesce(t2.id, null) is null);