优化器不应选择在第二个查询中使用EMP.DEPT_ID上的索引,因为它可以具有NULL值。这就是导致它从结果中排除一行的原因。
我目前唯一能想到的非错??误解释是,您已经以某种方式在DISABLE RELY模式下创建了约束,以便优化程序认为该字段不能包含NULL。在这种情况下,给定约束中不正确的信息,使用索引将是正确的。但是,似乎RELY选项不适用于NOT NULL约束,因此我不认为这可能是问题所在。但是,请仔细查看表上的所有约束。
除此之外,关于完全外部联接的错误结果,Oracle网站上存在许多令人惊讶的错误。您可能会打中其中之一。在许多情况下,解决方法是禁用“本地”完全外部联接,您可以使用以下语句在当前会话中执行此操作: