diff --git a/src/backend/executor/nodeNestloop.c b/src/backend/executor/nodeNestloop.c
index b3d52e69ec..f6706d07d4 100644
--- a/src/backend/executor/nodeNestloop.c
+++ b/src/backend/executor/nodeNestloop.c
@@ -24,6 +24,7 @@
 #include "executor/execdebug.h"
 #include "executor/nodeNestloop.h"
 #include "miscadmin.h"
+#include "utils/datum.h"
 #include "utils/memutils.h"
 
 
@@ -130,9 +131,12 @@ ExecNestLoop(PlanState *pstate)
 			{
 				NestLoopParam *nlp = (NestLoopParam *) lfirst(lc);
 				int			paramno = nlp->paramno;
-				ParamExecData *prm;
+				ParamExecData *prm, prev;
+				const FormData_pg_attribute* attr =
+					&outerTupleSlot->tts_tupleDescriptor->attrs[paramno];
 
 				prm = &(econtext->ecxt_param_exec_vals[paramno]);
+				prev = *prm;
 				/* Param value should be an OUTER_VAR var */
 				Assert(IsA(nlp->paramval, Var));
 				Assert(nlp->paramval->varno == OUTER_VAR);
@@ -141,8 +145,12 @@ ExecNestLoop(PlanState *pstate)
 										  nlp->paramval->varattno,
 										  &(prm->isnull));
 				/* Flag parameter value as changed */
-				innerPlan->chgParam = bms_add_member(innerPlan->chgParam,
-													 paramno);
+				if (prm->isnull != prev.isnull ||
+					(!prm->isnull && !datumIsEqual(prm->value, prev.value, attr->attbyval, attr->attlen)))
+				{
+					innerPlan->chgParam = bms_add_member(innerPlan->chgParam,
+														 paramno);
+				}
 			}
 
 			/*
