starocean999 opened a new pull request, #64898:
URL: https://github.com/apache/doris/pull/64898

   When `PushDownJoinOtherCondition` processes a `NULL_AWARE_LEFT_ANTI_JOIN` 
   with empty hash join conjuncts, it incorrectly pushes the other join 
conditions 
   that reference only the right-side slots down to the right child. This 
changes 
   the evaluation semantics of the NOT IN subquery, because filtering the right 
   child before the null-aware anti join eliminates NULL values prematurely.
   
   For a `NULL_AWARE_LEFT_ANTI_JOIN`, the hash join conjuncts represent the 
   correlation between the outer and inner tables. When there is no correlation 
   (i.e., hash conjuncts are empty), the other join conditions must not be 
pushed 
   to the right child, as doing so would filter rows from the subquery result 
   before the NULL check, potentially producing incorrect results.
   
   Example affected query:
     SELECT COUNT(*) FROM (SELECT 1 AS x) t 
     WHERE 1 NOT IN (SELECT CAST(NULL AS INT));
   
   The subquery returns NULL, so NOT IN should evaluate to UNKNOWN (NULL), 
   meaning no rows match and COUNT returns 0. However, pushing the other 
condition 
   to the right child changes this behavior and produces wrong results.
   
   Fix:
   Add a guard in `PushDownJoinOtherCondition` to keep the other condition as 
   a remaining other conjunct (not pushed to the right child) when the join 
type 
   is `NULL_AWARE_LEFT_ANTI_JOIN` and hash join conjuncts are empty.
   
   
   None
   
   ### Check List (For Author)
   
   - Test <!-- At least one of them must be included. -->
       - [ ] Regression test
       - [ ] Unit Test
       - [ ] Manual test (add detailed scripts or steps below)
       - [ ] No need to test or manual test. Explain why:
           - [ ] This is a refactor/code format and no logic has been changed.
           - [ ] Previous test can cover this change.
           - [ ] No code files have been changed.
           - [ ] Other reason <!-- Add your reason?  -->
   
   - Behavior changed:
       - [ ] No.
       - [ ] Yes. <!-- Explain the behavior change -->
   
   - Does this need documentation?
       - [ ] No.
       - [ ] Yes. <!-- Add document PR link here. eg: 
https://github.com/apache/doris-website/pull/1214 -->
   
   ### Check List (For Reviewer who merge this PR)
   
   - [ ] Confirm the release note
   - [ ] Confirm test cases
   - [ ] Confirm document
   - [ ] Add branch pick label <!-- Add branch pick label that this PR should 
merge into -->
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to