diff --git a/pkg/sql/plan2/build_expr.go b/pkg/sql/plan2/build_expr.go
index 24a2fa8fe57ddae9f0a60e1d4ff4df9f1c1fdab8..b84a3c587a5523e8f0995adcce0814a8b8f6a516 100644
--- a/pkg/sql/plan2/build_expr.go
+++ b/pkg/sql/plan2/build_expr.go
@@ -304,7 +304,7 @@ func buildColRefExpr(astExpr *tree.UnresolvedName, ctx CompilerContext, query *Q
 		name := astExpr.Parts[0]
 		if binderCtx != nil {
 			if val, ok := binderCtx.columnAlias[name]; ok {
-				return val, nil
+				return DeepCopyExpr(val), nil
 			}
 		}
 
diff --git a/pkg/sql/plan2/build_select.go b/pkg/sql/plan2/build_select.go
index b8e7117d7ef106178d81df78f771e8028a188800..e8d58530a2aeebea3827c7d707f7ebf8b6bef0d3 100644
--- a/pkg/sql/plan2/build_select.go
+++ b/pkg/sql/plan2/build_select.go
@@ -106,7 +106,7 @@ func buildSelect(stmt *tree.Select, ctx CompilerContext, query *Query, binderCtx
 				break
 			}
 
-			node.ProjectList = append(node.ProjectList, expr)
+			node.ProjectList = append(node.ProjectList, DeepCopyExpr(expr))
 		}
 		switch listExpr := expr.Expr.(type) {
 		case *plan.Expr_List:
@@ -129,7 +129,7 @@ func buildSelect(stmt *tree.Select, ctx CompilerContext, query *Query, binderCtx
 				}
 				expr.TableName = ""
 				expr.ColName = alias
-				node.ProjectList = append(node.ProjectList, expr)
+				node.ProjectList = append(node.ProjectList, DeepCopyExpr(expr))
 			}
 			selectList = append(selectList, expr)
 		}
@@ -199,7 +199,7 @@ func buildSelect(stmt *tree.Select, ctx CompilerContext, query *Query, binderCtx
 		for _, selectExpr := range selectExprs {
 			alias := string(selectExpr.As)
 			if len(alias) != 0 {
-				sortNode.ProjectList = append(sortNode.ProjectList, binderCtx.columnAlias[alias])
+				sortNode.ProjectList = append(sortNode.ProjectList, DeepCopyExpr(binderCtx.columnAlias[alias]))
 				continue
 			}
 			expr, _, err := buildExpr(selectExpr.Expr, ctx, query, sortNode, binderCtx, false)
diff --git a/pkg/sql/plan2/build_util.go b/pkg/sql/plan2/build_util.go
index e7bf9c8699d578665a12abac78dbfaee1ea63c7a..950f3efb72f9f3ee4191cf0c8e996133cb98516b 100644
--- a/pkg/sql/plan2/build_util.go
+++ b/pkg/sql/plan2/build_util.go
@@ -227,11 +227,11 @@ func fillJoinProjectList(binderCtx *BinderContext, usingCols map[string]int, nod
 		// select * from R join S using(a, b)
 		// we get projectList as :  [a, b, r1, r2, r3, s1, s2]
 		if ok {
-			node.ProjectList[colIdx] = colExpr
-			projectNode.ProjectList[colIdx] = colExpr
+			node.ProjectList[colIdx] = DeepCopyExpr(colExpr)
+			projectNode.ProjectList[colIdx] = DeepCopyExpr(colExpr)
 		} else {
-			node.ProjectList[projNodeIdx] = colExpr
-			projectNode.ProjectList[projNodeIdx] = colExpr
+			node.ProjectList[projNodeIdx] = DeepCopyExpr(colExpr)
+			projectNode.ProjectList[projNodeIdx] = DeepCopyExpr(colExpr)
 			projNodeIdx++
 		}
 		joinNodeIdx++