diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c
index 9f40ed77e6..61ccfd300b 100644
--- a/src/backend/optimizer/plan/setrefs.c
+++ b/src/backend/optimizer/plan/setrefs.c
@@ -756,6 +756,12 @@ set_plan_refs(PlannerInfo *root, Plan *plan, int rtoffset)
 			{
 				ResultCache *rcplan = (ResultCache *) plan;
 
+				/*
+				 * Result Cache does not evaluate its targetlist.  It just
+				 * uses the same targetlist from its outer subnode.
+				 */
+				set_dummy_tlist_references(plan, rtoffset);
+
 				rcplan->param_exprs = fix_scan_list(root, rcplan->param_exprs,
 													rtoffset,
 													NUM_EXEC_TLIST(plan));
diff --git a/src/test/regress/expected/join.out b/src/test/regress/expected/join.out
index 86fd3907c5..fec0325e73 100644
--- a/src/test/regress/expected/join.out
+++ b/src/test/regress/expected/join.out
@@ -4216,8 +4216,8 @@ where t1.f1 = ss.f1;
                     QUERY PLAN                    
 --------------------------------------------------
  Nested Loop
-   Output: t1.f1, i8.q1, i8.q2, q1, f1
-   Join Filter: (t1.f1 = f1)
+   Output: t1.f1, i8.q1, i8.q2, (i8.q1), t2.f1
+   Join Filter: (t1.f1 = t2.f1)
    ->  Nested Loop Left Join
          Output: t1.f1, i8.q1, i8.q2
          ->  Seq Scan on public.text_tbl t1
@@ -4228,7 +4228,7 @@ where t1.f1 = ss.f1;
                      Output: i8.q1, i8.q2
                      Filter: (i8.q2 = 123)
    ->  Result Cache
-         Output: q1, f1
+         Output: (i8.q1), t2.f1
          Cache Key: i8.q1
          ->  Limit
                Output: (i8.q1), t2.f1
@@ -4255,13 +4255,13 @@ select * from
   lateral (select i8.q1, t2.f1 from text_tbl t2 limit 1) as ss1,
   lateral (select ss1.* from text_tbl t3 limit 1) as ss2
 where t1.f1 = ss2.f1;
-                       QUERY PLAN                       
---------------------------------------------------------
+                            QUERY PLAN                             
+-------------------------------------------------------------------
  Nested Loop
-   Output: t1.f1, i8.q1, i8.q2, q1, f1, q1, f1
-   Join Filter: (t1.f1 = f1)
+   Output: t1.f1, i8.q1, i8.q2, (i8.q1), t2.f1, ((i8.q1)), (t2.f1)
+   Join Filter: (t1.f1 = (t2.f1))
    ->  Nested Loop
-         Output: t1.f1, i8.q1, i8.q2, q1, f1
+         Output: t1.f1, i8.q1, i8.q2, (i8.q1), t2.f1
          ->  Nested Loop Left Join
                Output: t1.f1, i8.q1, i8.q2
                ->  Seq Scan on public.text_tbl t1
@@ -4272,19 +4272,19 @@ where t1.f1 = ss2.f1;
                            Output: i8.q1, i8.q2
                            Filter: (i8.q2 = 123)
          ->  Result Cache
-               Output: q1, f1
+               Output: (i8.q1), t2.f1
                Cache Key: i8.q1
                ->  Limit
                      Output: (i8.q1), t2.f1
                      ->  Seq Scan on public.text_tbl t2
                            Output: i8.q1, t2.f1
    ->  Result Cache
-         Output: q1, f1
-         Cache Key: q1, f1
+         Output: ((i8.q1)), (t2.f1)
+         Cache Key: (i8.q1), t2.f1
          ->  Limit
-               Output: (q1), (f1)
+               Output: ((i8.q1)), (t2.f1)
                ->  Seq Scan on public.text_tbl t3
-                     Output: q1, f1
+                     Output: (i8.q1), t2.f1
 (28 rows)
 
 select * from