diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c
index 11ce7e33573..cd8a1ee26a9 100644
--- a/src/backend/optimizer/plan/analyzejoins.c
+++ b/src/backend/optimizer/plan/analyzejoins.c
@@ -344,7 +344,8 @@ remove_rel_from_query(PlannerInfo *root, RelOptInfo *rel,
 	}
 
 	/*
-	 * Remove references to the rel from other baserels' attr_needed arrays.
+	 * Remove references to the rel from other baserels' attr_needed arrays and
+	 * lateral_vars lists.
 	 */
 	for (rti = 1; rti < root->simple_rel_array_size; rti++)
 	{
@@ -366,12 +367,16 @@ remove_rel_from_query(PlannerInfo *root, RelOptInfo *rel,
 			 attroff--)
 		{
 			otherrel->attr_needed[attroff] =
-				bms_del_member(otherrel->attr_needed[attroff], relid);
+				adjust_relid_set(otherrel->attr_needed[attroff], relid, subst);
 			if (sjinfo != NULL)
 				otherrel->attr_needed[attroff] =
 					bms_del_member(otherrel->attr_needed[attroff],
 								   sjinfo->ojrelid);
 		}
+
+		if (subst > 0)
+			ChangeVarNodesExtended((Node *) otherrel->lateral_vars, relid,
+								   subst, 0, replace_relid_callback);
 	}
 
 	/*
