diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index bc81535905..647baa3cf6 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -6939,6 +6939,9 @@ apply_scanjoin_target_to_paths(PlannerInfo *root,
 	 */
 	rel->reltarget = llast_node(PathTarget, scanjoin_targets);
 
+	/* Extract SRF-free scan/join target. */
+	scanjoin_target = linitial_node(PathTarget, scanjoin_targets);
+
 	/* Special case: handle dummy relations separately. */
 	if (is_dummy_rel)
 	{
@@ -6967,12 +6970,15 @@ apply_scanjoin_target_to_paths(PlannerInfo *root,
 		rel->part_rels = NULL;
 		rel->boundinfo = NULL;
 
+		/* Now fix things up if scan/join target contains SRFs */
+		if (root->parse->hasTargetSRFs)
+			adjust_paths_for_srfs(root, rel,
+					scanjoin_targets,
+					scanjoin_targets_contain_srfs);
+
 		return;
 	}
 
-	/* Extract SRF-free scan/join target. */
-	scanjoin_target = linitial_node(PathTarget, scanjoin_targets);
-
 	/*
 	 * Adjust each input path.  If the tlist exprs are the same, we can just
 	 * inject the sortgroupref information into the existing pathtarget.
diff --git a/src/test/regress/expected/tsrf.out b/src/test/regress/expected/tsrf.out
index 25be6b9ab1..75e6614ab3 100644
--- a/src/test/regress/expected/tsrf.out
+++ b/src/test/regress/expected/tsrf.out
@@ -81,6 +81,12 @@ SELECT generate_series(1, generate_series(1, 3)), generate_series(2, 4);
                3 |               4
 (6 rows)
 
+-- SRF in a no-op query
+SELECT unnest(ARRAY[1, 2]) FROM pg_class WHERE false;
+ unnest 
+--------
+(0 rows)
+
 CREATE TABLE few(id int, dataa text, datab text);
 INSERT INTO few VALUES(1, 'a', 'foo'),(2, 'a', 'bar'),(3, 'b', 'bar');
 -- SRF output order of sorting is maintained, if SRF is not referenced
diff --git a/src/test/regress/sql/tsrf.sql b/src/test/regress/sql/tsrf.sql
index 0a1e8e5666..dafeab7b68 100644
--- a/src/test/regress/sql/tsrf.sql
+++ b/src/test/regress/sql/tsrf.sql
@@ -25,6 +25,9 @@ explain (verbose, costs off)
 SELECT generate_series(1, generate_series(1, 3)), generate_series(2, 4);
 SELECT generate_series(1, generate_series(1, 3)), generate_series(2, 4);
 
+-- SRF in a no-op query
+SELECT unnest(ARRAY[1, 2]) FROM pg_class WHERE false;
+
 CREATE TABLE few(id int, dataa text, datab text);
 INSERT INTO few VALUES(1, 'a', 'foo'),(2, 'a', 'bar'),(3, 'b', 'bar');
 
