diff --git a/internal/dynamo-browse/controllers/columns.go b/internal/dynamo-browse/controllers/columns.go
index 53f3386..b58f97b 100644
--- a/internal/dynamo-browse/controllers/columns.go
+++ b/internal/dynamo-browse/controllers/columns.go
@@ -38,6 +38,7 @@ func (cc *ColumnsController) ShiftColumnLeft(idx int) tea.Msg {
 
 	col := cc.colModel.Columns[idx-1]
 	cc.colModel.Columns[idx-1], cc.colModel.Columns[idx] = cc.colModel.Columns[idx], col
+	cc.colModel.WasRearranged = true
 
 	return ColumnsUpdated{}
 }
@@ -49,6 +50,7 @@ func (cc *ColumnsController) ShiftColumnRight(idx int) tea.Msg {
 
 	col := cc.colModel.Columns[idx+1]
 	cc.colModel.Columns[idx+1], cc.colModel.Columns[idx] = cc.colModel.Columns[idx], col
+	cc.colModel.WasRearranged = true
 
 	return ColumnsUpdated{}
 }
@@ -63,6 +65,8 @@ func (cc *ColumnsController) onNewResultSet(rs *models.ResultSet, op resultSetUp
 
 	if cc.colModel == nil || (op == resultSetUpdateInit || op == resultSetUpdateQuery) {
 		cc.colModel = columns.NewColumnsFromResultSet(rs)
+	} else {
+		cc.colModel.AddMissingColumns(rs)
 	}
 }
 
@@ -89,6 +93,7 @@ func (cc *ColumnsController) AddColumn(afterIndex int) tea.Msg {
 
 			cc.colModel.Columns = newCols
 		}
+		cc.colModel.WasRearranged = true
 
 		return tea.Batch(
 			events.SetTeaMessage(ColumnsUpdated{}),
@@ -106,6 +111,7 @@ func (cc *ColumnsController) DeleteColumn(afterIndex int) tea.Msg {
 	newCols = append(newCols, cc.colModel.Columns[:afterIndex]...)
 	newCols = append(newCols, cc.colModel.Columns[afterIndex+1:]...)
 	cc.colModel.Columns = newCols
+	cc.colModel.WasRearranged = true
 
 	return ColumnsUpdated{}
 }
diff --git a/internal/dynamo-browse/models/columns/columns.go b/internal/dynamo-browse/models/columns/columns.go
index eb87711..c24fe1d 100644
--- a/internal/dynamo-browse/models/columns/columns.go
+++ b/internal/dynamo-browse/models/columns/columns.go
@@ -7,8 +7,9 @@ import (
 )
 
 type Columns struct {
-	TableInfo *models.TableInfo
-	Columns   []Column
+	TableInfo     *models.TableInfo
+	WasRearranged bool
+	Columns       []Column
 }
 
 func NewColumnsFromResultSet(rs *models.ResultSet) *Columns {
@@ -28,6 +29,42 @@ func NewColumnsFromResultSet(rs *models.ResultSet) *Columns {
 	}
 }
 
+func (cols *Columns) AddMissingColumns(rs *models.ResultSet) {
+	existingColumns := make(map[string]Column)
+	for _, col := range cols.Columns {
+		existingColumns[col.Name] = col
+	}
+
+	rsCols := rs.Columns()
+	var newCols []Column
+
+	if cols.WasRearranged {
+		newCols = append([]Column{}, cols.Columns...)
+		for _, c := range rsCols {
+			if _, hasCol := existingColumns[c]; !hasCol {
+				newCols = append(newCols, Column{
+					Name:      c,
+					Evaluator: SimpleFieldValueEvaluator(c),
+				})
+			}
+		}
+	} else {
+		newCols = make([]Column, len(rsCols))
+		for i, c := range rsCols {
+			if existingCol, hasCol := existingColumns[c]; hasCol {
+				newCols[i] = existingCol
+			} else {
+				newCols[i] = Column{
+					Name:      c,
+					Evaluator: SimpleFieldValueEvaluator(c),
+				}
+			}
+		}
+	}
+
+	cols.Columns = newCols
+}
+
 func (cols *Columns) VisibleColumns() []Column {
 	if cols == nil {
 		return []Column{}