diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala index 4304f4756556..d8fef0320efc 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala @@ -1272,8 +1272,11 @@ object InferFiltersFromConstraints extends Rule[LogicalPlan] private def inferFilters(plan: LogicalPlan): LogicalPlan = plan.transformWithPruning( _.containsAnyPattern(FILTER, JOIN)) { case filter @ Filter(condition, child) => - val newFilters = filter.constraints -- - (child.constraints ++ splitConjunctivePredicates(condition)) + var newFilters = filter.constraints + val itr = (child.constraints ++ splitConjunctivePredicates(condition)).iterator + while (itr.hasNext) { + newFilters = newFilters - itr.next() + } if (newFilters.nonEmpty) { Filter(And(newFilters.reduce(And), condition), child) } else {