A SetOp node's exec indexes are assigned based on its left child node rather than the columns set in ColSet (see dolthub/go-mysql-server#3110)
The TableIdNode functions implemented for EmptyTable seem to only be used for testing purposes and cols is never actually set. As a result, no ColumnId's are added during columnIdsForNode, causing an offset when assigning column indexes (see #10434)