Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tajo into index_support

Conflicts:
	CHANGES
diff --git a/CHANGES b/CHANGES
index 9fb7eb3..2c32817 100644
--- a/CHANGES
+++ b/CHANGES
@@ -32,6 +32,9 @@
 
   IMPROVEMENT
 
+    TAJO-1700: Add better exception handling in TajoMasterClientService. 
+    (hyunsik)
+
     TAJO-1343: Improve the memory usage of physical executors. (jihoon)
 
     TAJO-1696: Resource calculator should consider the requested disk resource 
@@ -195,6 +198,8 @@
     TAJO-1657: Tajo Rest API /database/{database-name]/tables should return table 
     names only without invalid external table info. 
 
+    TAJO-1597: Problem of ignoring theta join condition. (jihoon)
+
     TAJO-1697: RCFile progress causes NPE occasionally. (jinho)
 
     TAJO-1689: Metrics file reporter prints histogram metric without group name.
@@ -406,7 +411,12 @@
 
   SUB TASKS
 
+<<<<<<< HEAD
     TAJO-1302: Support index metadata backup and restore. (jihoon)
+=======
+    TAJO-1484 Apply on ColPartitionStoreExec. (Contributed by Navis, 
+    committed by hyunsik)
+>>>>>>> bcec5eb7e247dc983184b37a3dbb4143afd19ac8
 
     TAJO-1464: Add ORCFileScanner to read ORCFile table. (Contributed by 
     Jongyoung Park, Committed by jihoon)
diff --git a/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java b/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
index 3cff88a..4900188 100644
--- a/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
@@ -36,7 +36,9 @@
 import org.apache.tajo.rpc.RpcChannelFactory;
 import org.apache.tajo.rpc.RpcClientManager;
 import org.apache.tajo.rpc.RpcConstants;
+import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos;
 import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.KeyValueSetResponse;
+import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.ReturnState;
 import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.StringResponse;
 import org.apache.tajo.service.ServiceTracker;
 import org.apache.tajo.util.CommonTestingUtil;
@@ -54,8 +56,10 @@
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import static org.apache.tajo.error.Errors.ResultCode.NO_SUCH_SESSION_VARIABLE;
 import static org.apache.tajo.exception.ReturnStateUtil.isError;
 import static org.apache.tajo.exception.ReturnStateUtil.isSuccess;
+import static org.apache.tajo.exception.ReturnStateUtil.isThisError;
 import static org.apache.tajo.exception.SQLExceptionUtil.toSQLException;
 import static org.apache.tajo.exception.SQLExceptionUtil.throwIfError;
 import static org.apache.tajo.ipc.ClientProtos.CreateSessionRequest;
@@ -278,9 +282,18 @@
 
   public Boolean existSessionVariable(final String varname) throws SQLException {
 
-    BlockingInterface stub = getTMStub();
     try {
-      return isSuccess(stub.existSessionVariable(null, getSessionedString(varname)));
+      final BlockingInterface stub = getTMStub();
+      ReturnState state = stub.existSessionVariable(null, getSessionedString(varname));
+
+      if (isThisError(state, NO_SUCH_SESSION_VARIABLE)) {
+        return false;
+      } else if (isError(state)){
+        throw SQLExceptionUtil.toSQLException(state);
+      }
+
+      return isSuccess(state);
+
     } catch (ServiceException e) {
       throw new RuntimeException(e);
     }
diff --git a/tajo-client/src/main/proto/TajoMasterClientProtocol.proto b/tajo-client/src/main/proto/TajoMasterClientProtocol.proto
index b772abe..78f0f30 100644
--- a/tajo-client/src/main/proto/TajoMasterClientProtocol.proto
+++ b/tajo-client/src/main/proto/TajoMasterClientProtocol.proto
@@ -37,7 +37,7 @@
   rpc removeSession(SessionIdProto) returns (ReturnState);
   rpc updateSessionVariables(UpdateSessionVariableRequest) returns (SessionUpdateResponse);
   rpc existSessionVariable(SessionedStringProto) returns (ReturnState);
-  rpc getSessionVariable(SessionedStringProto) returns (StringProto);
+  rpc getSessionVariable(SessionedStringProto) returns (StringResponse);
   rpc getAllSessionVariables(SessionIdProto) returns (KeyValueSetResponse);
 
   // Query Submission and Result APIs
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java
index 76abc6d..33714db 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java
@@ -63,17 +63,7 @@
     super(context, plan.getInSchema(), plan.getOutSchema(), child);
     this.plan = plan;
 
-    if (plan.getType() == NodeType.CREATE_TABLE) {
-      if (!(plan instanceof CreateTableNode)) {
-        throw new IllegalArgumentException("plan should be a CreateTableNode type.");
-      }
-      this.outSchema = ((CreateTableNode)plan).getTableSchema();
-    } else if (plan.getType() == NodeType.INSERT) {
-      if (!(plan instanceof InsertNode)) {
-        throw new IllegalArgumentException("plan should be a InsertNode type.");
-      }
-      this.outSchema = ((InsertNode)plan).getTableSchema();
-    }
+    this.outSchema = plan.getTableSchema();
 
     // set table meta
     if (this.plan.hasOptions()) {
@@ -171,4 +161,9 @@
     appender.enableStats();
     appender.init();
   }
+
+  @Override
+  public void rescan() throws IOException {
+    // nothing to do
+  }
 }
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/HashBasedColPartitionStoreExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/HashBasedColPartitionStoreExec.java
index 0a812ee..1860ec0 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/HashBasedColPartitionStoreExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/HashBasedColPartitionStoreExec.java
@@ -20,6 +20,8 @@
 
 import org.apache.tajo.catalog.statistics.StatisticsUtil;
 import org.apache.tajo.catalog.statistics.TableStats;
+import org.apache.tajo.datum.Datum;
+import org.apache.tajo.engine.planner.physical.ComparableVector.ComparableTuple;
 import org.apache.tajo.plan.logical.StoreTableNode;
 import org.apache.tajo.storage.Appender;
 import org.apache.tajo.storage.Tuple;
@@ -36,26 +38,35 @@
  * This class is a physical operator to store at column partitioned table.
  */
 public class HashBasedColPartitionStoreExec extends ColPartitionStoreExec {
-  private final Map<String, Appender> appenderMap = new HashMap<String, Appender>();
+
+  private final ComparableTuple partKey;
+  private final Map<ComparableTuple, Appender> appenderMap = new HashMap<ComparableTuple, Appender>();
 
   public HashBasedColPartitionStoreExec(TaskAttemptContext context, StoreTableNode plan, PhysicalExec child)
       throws IOException {
     super(context, plan, child);
+    partKey = new ComparableTuple(inSchema, keyIds);
   }
 
-  public void init() throws IOException {
-    super.init();
-  }
+  private transient final StringBuilder sb = new StringBuilder();
 
-  private Appender getAppender(String partition) throws IOException {
-    Appender appender = appenderMap.get(partition);
-
-    if (appender == null) {
-      appender = getNextPartitionAppender(partition);
-      appenderMap.put(partition, appender);
-    } else {
-      appender = appenderMap.get(partition);
+  private Appender getAppender(ComparableTuple partitionKey, Tuple tuple) throws IOException {
+    Appender appender = appenderMap.get(partitionKey);
+    if (appender != null) {
+      return appender;
     }
+    sb.setLength(0);
+    for (int i = 0; i < keyNum; i++) {
+      if (i > 0) {
+        sb.append('/');
+      }
+      sb.append(keyNames[i]).append('=');
+      Datum datum = tuple.asDatum(keyIds[i]);
+      sb.append(StringUtils.escapePathName(datum.asChars()));
+    }
+    appender = getNextPartitionAppender(sb.toString());
+
+    appenderMap.put(partitionKey.copy(), appender);
     return appender;
   }
 
@@ -65,27 +76,14 @@
   @Override
   public Tuple next() throws IOException {
     Tuple tuple;
-    StringBuilder sb = new StringBuilder();
     while(!context.isStopped() && (tuple = child.next()) != null) {
-      // set subpartition directory name
-      sb.delete(0, sb.length());
-      if (keyIds != null) {
-        for(int i = 0; i < keyIds.length; i++) {
-          if(i > 0)
-            sb.append("/");
-          sb.append(keyNames[i]).append("=");
-          sb.append(StringUtils.escapePathName(tuple.getText(keyIds[i])));
-        }
-      }
-
+      partKey.set(tuple);
       // add tuple
-      Appender appender = getAppender(sb.toString());
-      appender.addTuple(tuple);
+      getAppender(partKey, tuple).addTuple(tuple);
     }
 
     List<TableStats> statSet = new ArrayList<TableStats>();
-    for (Map.Entry<String, Appender> entry : appenderMap.entrySet()) {
-      Appender app = entry.getValue();
+    for (Appender app : appenderMap.values()) {
       app.flush();
       app.close();
       statSet.add(app.getStats());
@@ -97,9 +95,4 @@
 
     return null;
   }
-
-  @Override
-  public void rescan() throws IOException {
-    // nothing to do
-  }
 }
\ No newline at end of file
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SortBasedColPartitionStoreExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SortBasedColPartitionStoreExec.java
index 3a0dd38..607dff7 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SortBasedColPartitionStoreExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SortBasedColPartitionStoreExec.java
@@ -22,9 +22,10 @@
 package org.apache.tajo.engine.planner.physical;
 
 import org.apache.tajo.catalog.statistics.StatisticsUtil;
+import org.apache.tajo.datum.Datum;
+import org.apache.tajo.engine.planner.physical.ComparableVector.ComparableTuple;
 import org.apache.tajo.plan.logical.StoreTableNode;
 import org.apache.tajo.storage.Tuple;
-import org.apache.tajo.storage.VTuple;
 import org.apache.tajo.util.StringUtils;
 import org.apache.tajo.worker.TaskAttemptContext;
 
@@ -35,35 +36,25 @@
  * ascending or descending order of partition columns.
  */
 public class SortBasedColPartitionStoreExec extends ColPartitionStoreExec {
-  private Tuple currentKey;
-  private Tuple prevKey;
+
+  private ComparableTuple prevKey;
 
   public SortBasedColPartitionStoreExec(TaskAttemptContext context, StoreTableNode plan, PhysicalExec child)
       throws IOException {
     super(context, plan, child);
   }
 
-  public void init() throws IOException {
-    super.init();
+  private transient StringBuilder sb = new StringBuilder();
 
-    currentKey = new VTuple(keyNum);
-  }
-
-  private void fillKeyTuple(Tuple inTuple, Tuple keyTuple) {
-    for (int i = 0; i < keyIds.length; i++) {
-      keyTuple.put(i, inTuple.asDatum(keyIds[i]));
-    }
-  }
-
-  private String getSubdirectory(Tuple keyTuple) {
-    StringBuilder sb = new StringBuilder();
-
+  private String getSubdirectory(Tuple tuple) {
+    sb.setLength(0);
     for(int i = 0; i < keyIds.length; i++) {
-      if(i > 0) {
-        sb.append("/");
+      Datum datum = tuple.asDatum(keyIds[i]);
+      if (i > 0) {
+        sb.append('/');
       }
-      sb.append(keyNames[i]).append("=");      
-      sb.append(StringUtils.escapePathName(keyTuple.getText(i)));
+      sb.append(keyNames[i]).append('=');
+      sb.append(StringUtils.escapePathName(datum.asChars()));
     }
     return sb.toString();
   }
@@ -73,22 +64,19 @@
     Tuple tuple;
     while(!context.isStopped() && (tuple = child.next()) != null) {
 
-      fillKeyTuple(tuple, currentKey);
-
       if (prevKey == null) {
-        appender = getNextPartitionAppender(getSubdirectory(currentKey));
-        prevKey = new VTuple(currentKey);
-      } else {
-        if (!prevKey.equals(currentKey)) {
-          appender.close();
-          StatisticsUtil.aggregateTableStat(aggregatedStats, appender.getStats());
+        appender = getNextPartitionAppender(getSubdirectory(tuple));
+        prevKey = new ComparableTuple(inSchema, keyIds);
+        prevKey.set(tuple);
+      } else if (!prevKey.equals(tuple)) {
+        appender.close();
+        StatisticsUtil.aggregateTableStat(aggregatedStats, appender.getStats());
 
-          appender = getNextPartitionAppender(getSubdirectory(currentKey));
-          prevKey.put(currentKey.getValues());
+        appender = getNextPartitionAppender(getSubdirectory(tuple));
+        prevKey.set(tuple);
 
-          // reset all states for file rotating
-          writtenFileNum = 0;
-        }
+        // reset all states for file rotating
+        writtenFileNum = 0;
       }
 
       appender.addTuple(tuple);
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java b/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
index c1afbc9..0e9b6e6 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
@@ -40,6 +40,9 @@
 import org.apache.tajo.conf.TajoConf;
 import org.apache.tajo.conf.TajoConf.ConfVars;
 import org.apache.tajo.engine.query.QueryContext;
+import org.apache.tajo.exception.ErrorUtil;
+import org.apache.tajo.exception.ExceptionUtil;
+import org.apache.tajo.exception.ReturnStateUtil;
 import org.apache.tajo.ipc.ClientProtos;
 import org.apache.tajo.ipc.ClientProtos.*;
 import org.apache.tajo.ipc.TajoMasterClientProtocol;
@@ -67,8 +70,12 @@
 import java.util.List;
 
 import static org.apache.tajo.TajoConstants.DEFAULT_DATABASE_NAME;
+import static org.apache.tajo.exception.ExceptionUtil.printStackTraceIfError;
 import static org.apache.tajo.exception.ReturnStateUtil.*;
 
+/**
+ * It provides Client Remote API service for TajoMaster.
+ */
 public class TajoMasterClientService extends AbstractService {
   private final static Log LOG = LogFactory.getLog(TajoMasterClientService.class);
   private final MasterContext context;
@@ -78,8 +85,6 @@
   private BlockingRpcServer server;
   private InetSocketAddress bindAddress;
 
-  private final BoolProto BOOL_TRUE =
-      BoolProto.newBuilder().setValue(true).build();
 
   public TajoMasterClientService(MasterContext context) {
     super(TajoMasterClientService.class.getName());
@@ -142,6 +147,9 @@
         return builder.build();
 
       } catch (Throwable t) {
+
+        printStackTraceIfError(LOG, t);
+
         CreateSessionResponse.Builder builder = CreateSessionResponse.newBuilder();
         builder.setState(returnError(t));
         return builder.build();
@@ -152,8 +160,13 @@
     public ReturnState removeSession(RpcController controller, TajoIdProtos.SessionIdProto request)
         throws ServiceException {
 
-      if (request != null) {
-        context.getSessionManager().removeSession(request.getId());
+      try {
+        if (request != null) {
+          context.getSessionManager().removeSession(request.getId());
+        }
+      } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
+        return ReturnStateUtil.returnError(t);
       }
 
       return OK;
@@ -181,20 +194,29 @@
         return builder.build();
 
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         builder.setState(returnError(t));
         return builder.build();
       }
     }
 
     @Override
-    public StringProto getSessionVariable(RpcController controller, SessionedStringProto request)
+    public StringResponse getSessionVariable(RpcController controller, SessionedStringProto request)
         throws ServiceException {
 
       try {
-        return ProtoUtil.convertString(
-            context.getSessionManager().getVariable(request.getSessionId().getId(), request.getValue()));
+        String value = context.getSessionManager().getVariable(request.getSessionId().getId(), request.getValue());
+
+        return StringResponse.newBuilder()
+            .setState(OK)
+            .setValue(value)
+            .build();
+
       } catch (Throwable t) {
-        throw new ServiceException(t);
+        printStackTraceIfError(LOG, t);
+        return StringResponse.newBuilder()
+            .setState(returnError(t))
+            .build();
       }
     }
 
@@ -209,6 +231,7 @@
           return errNoSessionVar(request.getValue());
         }
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         return returnError(t);
       }
     }
@@ -229,6 +252,7 @@
             .build();
 
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         return KeyValueSetResponse.newBuilder()
             .setState(returnError(t))
             .build();
@@ -245,6 +269,7 @@
             .build();
 
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         return StringResponse.newBuilder()
             .setState(returnError(t))
             .build();
@@ -264,6 +289,7 @@
           return errUndefinedDatabase(databaseName);
         }
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         return returnError(t);
       }
     }
@@ -279,10 +305,11 @@
 
         return context.getGlobalEngine().executeQuery(session, request.getQuery(), request.getIsJson());
 
-      } catch (Exception e) {
+      } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
 
         return ClientProtos.SubmitQueryResponse.newBuilder()
-            .setState(returnError(e))
+            .setState(returnError(t))
             .setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto())
             .setIsForwarded(true)
             .setUserName(context.getConf().getVar(ConfVars.USERNAME))
@@ -301,6 +328,7 @@
         builder.setState(OK);
 
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         builder.setState(returnError(t));
       }
       return builder.build();
@@ -352,20 +380,22 @@
             builder.setState(errIncompleteQuery(queryId));
         }
 
-        return builder.build();
       } catch (Throwable t) {
-        throw new ServiceException(t);
+        printStackTraceIfError(LOG, t);
+        builder.setState(returnError(t));
       }
+
+      return builder.build();
     }
 
     @Override
     public GetQueryListResponse getRunningQueryList(RpcController controller, TajoIdProtos.SessionIdProto request)
-
         throws ServiceException {
 
+      GetQueryListResponse.Builder builder = GetQueryListResponse.newBuilder();
+
       try {
         context.getSessionManager().touch(request.getId());
-        GetQueryListResponse.Builder builder= GetQueryListResponse.newBuilder();
 
         Collection<QueryInProgress> queries = new ArrayList<QueryInProgress>(context.getQueryJobManager().getSubmittedQueries());
         queries.addAll(context.getQueryJobManager().getRunningQueries());
@@ -388,11 +418,14 @@
           builder.addQueryList(infoBuilder.build());
         }
 
-        GetQueryListResponse result = builder.build();
-        return result;
+        builder.setState(OK);
+
       } catch (Throwable t) {
-        throw new ServiceException(t);
+        printStackTraceIfError(LOG, t);
+        builder.setState(returnError(t));
       }
+
+      return builder.build();
     }
 
     @Override
@@ -425,7 +458,9 @@
         }
 
         builder.setState(OK);
+
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         builder.setState(returnError(t));
       }
 
@@ -436,10 +471,11 @@
     public GetQueryStatusResponse getQueryStatus(RpcController controller, GetQueryStatusRequest request)
         throws ServiceException {
 
+      GetQueryStatusResponse.Builder builder = GetQueryStatusResponse.newBuilder();
+
       try {
         context.getSessionManager().touch(request.getSessionId().getId());
 
-        GetQueryStatusResponse.Builder builder = GetQueryStatusResponse.newBuilder();
         QueryId queryId = new QueryId(request.getQueryId());
         builder.setQueryId(request.getQueryId());
 
@@ -486,11 +522,13 @@
             }
           }
         }
-        return builder.build();
 
       } catch (Throwable t) {
-        throw new ServiceException(t);
+        printStackTraceIfError(LOG, t);
+        builder.setState(returnError(t));
       }
+
+      return builder.build();
     }
 
     @Override
@@ -540,8 +578,10 @@
             request.getSessionId().getId() + "," + queryId + ", " + rows.size() + " rows");
 
       } catch (Throwable t) {
-        builder.setResultSet(resultSetBuilder.build()); // required field
+        printStackTraceIfError(LOG, t);
+
         builder.setState(returnError(t));
+        builder.setResultSet(resultSetBuilder.build()); // required field
       }
 
       return builder.build();
@@ -560,6 +600,7 @@
         return OK;
 
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         return returnError(t);
       }
     }
@@ -588,6 +629,7 @@
         builder.setState(OK);
 
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         builder.setState(returnError(t));
       }
 
@@ -612,6 +654,7 @@
         return OK;
 
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         return returnError(t);
       }
     }
@@ -647,6 +690,7 @@
         builder.setState(OK);
 
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         builder.setState(returnError(t));
       }
 
@@ -666,6 +710,7 @@
         }
 
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         return returnError(t);
       }
     }
@@ -681,6 +726,7 @@
         }
 
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         return returnError(t);
       }
     }
@@ -698,6 +744,7 @@
         }
 
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         return returnError(t);
       }
     }
@@ -715,6 +762,7 @@
             .build();
 
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         return StringListResponse.newBuilder()
             .setState(returnError(t))
             .build();
@@ -745,6 +793,7 @@
         }
 
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         return returnError(t);
       }
     }
@@ -768,6 +817,7 @@
           .build();
 
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         return StringListResponse.newBuilder()
             .setState(returnError(t))
             .build();
@@ -808,7 +858,10 @@
               .build();
         }
       } catch (Throwable t) {
-        throw new ServiceException(t);
+        printStackTraceIfError(LOG, t);
+        return TableResponse.newBuilder()
+            .setState(returnError(t))
+            .build();
       }
     }
 
@@ -851,6 +904,7 @@
             .setTable(desc.getProto()).build();
 
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         return TableResponse.newBuilder()
             .setState(returnError(t))
             .build();
@@ -868,6 +922,7 @@
         return OK;
 
       } catch (Throwable t) {
+        printStackTraceIfError(LOG, t);
         return returnError(t);
       }
     }
@@ -899,7 +954,11 @@
             .build();
 
       } catch (Throwable t) {
-        return FunctionListResponse.newBuilder().setState(returnError(t)).build();
+        printStackTraceIfError(LOG, t);
+
+        return FunctionListResponse.newBuilder().
+            setState(returnError(t))
+            .build();
       }
     }
 
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinQuery.java
index ad851e7..88b3548 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinQuery.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinQuery.java
@@ -18,7 +18,6 @@
 
 package org.apache.tajo.engine.query;
 
-import com.google.protobuf.ServiceException;
 import org.apache.tajo.IntegrationTest;
 import org.apache.tajo.NamedTest;
 import org.junit.AfterClass;
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinWithSubQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinWithSubQuery.java
index 1869946..6c9546e 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinWithSubQuery.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinWithSubQuery.java
@@ -18,7 +18,6 @@
 
 package org.apache.tajo.engine.query;
 
-import com.google.protobuf.ServiceException;
 import org.apache.tajo.IntegrationTest;
 import org.apache.tajo.NamedTest;
 import org.junit.AfterClass;
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestMultipleJoinTypes.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestMultipleJoinTypes.java
index b4ab1d7..d3cde3d 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestMultipleJoinTypes.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestMultipleJoinTypes.java
@@ -18,7 +18,6 @@
 
 package org.apache.tajo.engine.query;
 
-import com.google.protobuf.ServiceException;
 import org.apache.tajo.IntegrationTest;
 import org.apache.tajo.NamedTest;
 import org.apache.tajo.QueryTestCaseBase;
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java
index 5274d2c..0b42a6d 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java
@@ -18,7 +18,6 @@
 
 package org.apache.tajo.engine.query;
 
-import com.google.protobuf.ServiceException;
 import org.apache.tajo.IntegrationTest;
 import org.apache.tajo.NamedTest;
 import org.junit.AfterClass;
@@ -28,7 +27,6 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
-import java.sql.ResultSet;
 import java.sql.SQLException;
 
 @Category(IntegrationTest.class)
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash.plan
index 27de587..d161811 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash.plan
@@ -4,9 +4,9 @@
   => Targets: a_name (TEXT), b_name (TEXT)
   => out schema: {(2) a_name (TEXT), b_name (TEXT)}
   => in  schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
-   SELECTION(2)
+   SELECTION(6)
      => Search Cond: default.a.r_name (TEXT) < default.b.r_name (TEXT)
-      JOIN(6)(CROSS)
+      JOIN(7)(CROSS)
         => target list: a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)
         => out schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
         => in schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
@@ -43,9 +43,9 @@
   => Targets: a_name (TEXT), b_name (TEXT)
   => out schema: {(2) a_name (TEXT), b_name (TEXT)}
   => in  schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
-   SELECTION(2)
+   SELECTION(6)
      => Search Cond: default.a.r_name (TEXT) < default.b.r_name (TEXT)
-      JOIN(6)(CROSS)
+      JOIN(7)(CROSS)
         => target list: a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)
         => out schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
         => in schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan
index 0048ac6..cfbfa19 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan
@@ -4,9 +4,9 @@
   => Targets: a_name (TEXT), b_name (TEXT)
   => out schema: {(2) a_name (TEXT), b_name (TEXT)}
   => in  schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
-   SELECTION(2)
+   SELECTION(6)
      => Search Cond: default.a.r_name (TEXT) < default.b.r_name (TEXT)
-      JOIN(6)(CROSS)
+      JOIN(7)(CROSS)
         => target list: a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)
         => out schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
         => in schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
@@ -72,16 +72,16 @@
   => Targets: a_name (TEXT), b_name (TEXT)
   => out schema: {(2) a_name (TEXT), b_name (TEXT)}
   => in  schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
-   SELECTION(2)
+   SELECTION(6)
      => Search Cond: default.a.r_name (TEXT) < default.b.r_name (TEXT)
-      JOIN(6)(CROSS)
+      JOIN(7)(CROSS)
         => target list: a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)
         => out schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
         => in schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
-         SCAN(9) on eb_0000000000000_0000_000002
+         SCAN(10) on eb_0000000000000_0000_000002
            => out schema: {(2) a_name (TEXT), default.a.r_name (TEXT)}
            => in schema: {(2) a_name (TEXT), default.a.r_name (TEXT)}
-         SCAN(8) on eb_0000000000000_0000_000001
+         SCAN(9) on eb_0000000000000_0000_000001
            => out schema: {(2) b_name (TEXT), default.b.r_name (TEXT)}
            => in schema: {(2) b_name (TEXT), default.b.r_name (TEXT)}
 
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort.plan
index 27de587..d161811 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort.plan
@@ -4,9 +4,9 @@
   => Targets: a_name (TEXT), b_name (TEXT)
   => out schema: {(2) a_name (TEXT), b_name (TEXT)}
   => in  schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
-   SELECTION(2)
+   SELECTION(6)
      => Search Cond: default.a.r_name (TEXT) < default.b.r_name (TEXT)
-      JOIN(6)(CROSS)
+      JOIN(7)(CROSS)
         => target list: a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)
         => out schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
         => in schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
@@ -43,9 +43,9 @@
   => Targets: a_name (TEXT), b_name (TEXT)
   => out schema: {(2) a_name (TEXT), b_name (TEXT)}
   => in  schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
-   SELECTION(2)
+   SELECTION(6)
      => Search Cond: default.a.r_name (TEXT) < default.b.r_name (TEXT)
-      JOIN(6)(CROSS)
+      JOIN(7)(CROSS)
         => target list: a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)
         => out schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
         => in schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan
index 0048ac6..cfbfa19 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan
@@ -4,9 +4,9 @@
   => Targets: a_name (TEXT), b_name (TEXT)
   => out schema: {(2) a_name (TEXT), b_name (TEXT)}
   => in  schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
-   SELECTION(2)
+   SELECTION(6)
      => Search Cond: default.a.r_name (TEXT) < default.b.r_name (TEXT)
-      JOIN(6)(CROSS)
+      JOIN(7)(CROSS)
         => target list: a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)
         => out schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
         => in schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
@@ -72,16 +72,16 @@
   => Targets: a_name (TEXT), b_name (TEXT)
   => out schema: {(2) a_name (TEXT), b_name (TEXT)}
   => in  schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
-   SELECTION(2)
+   SELECTION(6)
      => Search Cond: default.a.r_name (TEXT) < default.b.r_name (TEXT)
-      JOIN(6)(CROSS)
+      JOIN(7)(CROSS)
         => target list: a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)
         => out schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
         => in schema: {(4) a_name (TEXT), b_name (TEXT), default.a.r_name (TEXT), default.b.r_name (TEXT)}
-         SCAN(9) on eb_0000000000000_0000_000002
+         SCAN(10) on eb_0000000000000_0000_000002
            => out schema: {(2) a_name (TEXT), default.a.r_name (TEXT)}
            => in schema: {(2) a_name (TEXT), default.a.r_name (TEXT)}
-         SCAN(8) on eb_0000000000000_0000_000001
+         SCAN(9) on eb_0000000000000_0000_000001
            => out schema: {(2) b_name (TEXT), default.b.r_name (TEXT)}
            => in schema: {(2) b_name (TEXT), default.b.r_name (TEXT)}
 
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Hash.plan
index 469668c..b2f4ff1 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Hash.plan
@@ -1,8 +1,8 @@
 explain
 -------------------------------
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) <= default.b.r_name (TEXT)
-   JOIN(6)(INNER)
+   JOIN(7)(INNER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.r_regionkey (INT4)
      => target list: default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT)
      => out schema: {(3) default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT)}
@@ -36,9 +36,9 @@
 [Enforcers]
  0: type=Broadcast, tables=default.a
 
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) <= default.b.r_name (TEXT)
-   JOIN(6)(INNER)
+   JOIN(7)(INNER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.r_regionkey (INT4)
      => target list: default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT)
      => out schema: {(3) default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT)}
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan
index 8e99f07..79d5e7a 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan
@@ -1,8 +1,8 @@
 explain
 -------------------------------
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) <= default.b.r_name (TEXT)
-   JOIN(6)(INNER)
+   JOIN(7)(INNER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.r_regionkey (INT4)
      => target list: default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT)
      => out schema: {(3) default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT)}
@@ -65,17 +65,17 @@
 [q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.b.r_regionkey (INT4), num=32)
 [q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.a.r_regionkey (INT4), num=32)
 
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) <= default.b.r_name (TEXT)
-   JOIN(6)(INNER)
+   JOIN(7)(INNER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.r_regionkey (INT4)
      => target list: default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT)
      => out schema: {(3) default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT)}
      => in schema: {(4) default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT), default.b.r_regionkey (INT4)}
-      SCAN(9) on eb_0000000000000_0000_000002
+      SCAN(10) on eb_0000000000000_0000_000002
         => out schema: {(2) default.a.r_name (TEXT), default.a.r_regionkey (INT4)}
         => in schema: {(2) default.a.r_name (TEXT), default.a.r_regionkey (INT4)}
-      SCAN(8) on eb_0000000000000_0000_000001
+      SCAN(9) on eb_0000000000000_0000_000001
         => out schema: {(2) default.b.r_name (TEXT), default.b.r_regionkey (INT4)}
         => in schema: {(2) default.b.r_name (TEXT), default.b.r_regionkey (INT4)}
 
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Sort.plan
index 469668c..b2f4ff1 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Sort.plan
@@ -1,8 +1,8 @@
 explain
 -------------------------------
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) <= default.b.r_name (TEXT)
-   JOIN(6)(INNER)
+   JOIN(7)(INNER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.r_regionkey (INT4)
      => target list: default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT)
      => out schema: {(3) default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT)}
@@ -36,9 +36,9 @@
 [Enforcers]
  0: type=Broadcast, tables=default.a
 
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) <= default.b.r_name (TEXT)
-   JOIN(6)(INNER)
+   JOIN(7)(INNER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.r_regionkey (INT4)
      => target list: default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT)
      => out schema: {(3) default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT)}
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan
index 8e99f07..79d5e7a 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan
@@ -1,8 +1,8 @@
 explain
 -------------------------------
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) <= default.b.r_name (TEXT)
-   JOIN(6)(INNER)
+   JOIN(7)(INNER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.r_regionkey (INT4)
      => target list: default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT)
      => out schema: {(3) default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT)}
@@ -65,17 +65,17 @@
 [q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.b.r_regionkey (INT4), num=32)
 [q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.a.r_regionkey (INT4), num=32)
 
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) <= default.b.r_name (TEXT)
-   JOIN(6)(INNER)
+   JOIN(7)(INNER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.r_regionkey (INT4)
      => target list: default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT)
      => out schema: {(3) default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT)}
      => in schema: {(4) default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.r_name (TEXT), default.b.r_regionkey (INT4)}
-      SCAN(9) on eb_0000000000000_0000_000002
+      SCAN(10) on eb_0000000000000_0000_000002
         => out schema: {(2) default.a.r_name (TEXT), default.a.r_regionkey (INT4)}
         => in schema: {(2) default.a.r_name (TEXT), default.a.r_regionkey (INT4)}
-      SCAN(8) on eb_0000000000000_0000_000001
+      SCAN(9) on eb_0000000000000_0000_000001
         => out schema: {(2) default.b.r_name (TEXT), default.b.r_regionkey (INT4)}
         => in schema: {(2) default.b.r_name (TEXT), default.b.r_regionkey (INT4)}
 
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash.plan
index ec3578c..5def40e 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash.plan
@@ -5,9 +5,9 @@
   => target list: ?sum (FLOAT8)
   => out schema:{(1) ?sum (FLOAT8)}
   => in schema:{(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
-   SELECTION(16)
+   SELECTION(20)
      => Search Cond: default.b.l_quantity (FLOAT8) > default.f.avg_quantity (FLOAT8)
-      JOIN(23)(INNER)
+      JOIN(24)(INNER)
         => Join Cond: default.c.o_orderkey (INT4) = default.f.l_orderkey (INT4)
         => target list: default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)
         => out schema: {(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
@@ -25,7 +25,7 @@
                  => Targets: default.e.l_orderkey (INT4), default.e.l_quantity (FLOAT8)
                  => out schema: {(2) default.e.l_orderkey (INT4), default.e.l_quantity (FLOAT8)}
                  => in  schema: {(2) default.e.l_orderkey (INT4), default.e.l_quantity (FLOAT8)}
-                  JOIN(21)(INNER)
+                  JOIN(22)(INNER)
                     => Join Cond: default.d.l_partkey (INT4) = default.part.p_partkey (INT4)
                     => target list: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
                     => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
@@ -38,7 +38,7 @@
                        => target list: default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)
                        => out schema: {(3) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)}
                        => in schema: {(16) default.d.l_comment (TEXT), default.d.l_commitdate (TEXT), default.d.l_discount (FLOAT8), default.d.l_extendedprice (FLOAT8), default.d.l_linenumber (INT4), default.d.l_linestatus (TEXT), default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8), default.d.l_receiptdate (TEXT), default.d.l_returnflag (TEXT), default.d.l_shipdate (TEXT), default.d.l_shipinstruct (TEXT), default.d.l_shipmode (TEXT), default.d.l_suppkey (INT4), default.d.l_tax (FLOAT8)}
-         JOIN(22)(INNER)
+         JOIN(23)(INNER)
            => Join Cond: default.c.o_orderkey (INT4) = default.b.l_orderkey (INT4)
            => target list: default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)
            => out schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
@@ -52,7 +52,7 @@
               => Targets: default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)
               => out schema: {(2) default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8)}
               => in  schema: {(3) default.b.l_linenumber (INT4), default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8)}
-               JOIN(20)(INNER)
+               JOIN(21)(INNER)
                  => Join Cond: default.a.l_partkey (INT4) = default.part.p_partkey (INT4)
                  => target list: default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)
                  => out schema: {(3) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)}
@@ -93,7 +93,7 @@
 [Enforcers]
  0: type=Broadcast, tables=default.part
 
-GROUP_BY(31)(l_orderkey)
+GROUP_BY(32)(l_orderkey)
   => exprs: (avg(default.e.l_quantity (FLOAT8)))
   => target list: default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)
   => out schema:{(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
@@ -106,7 +106,7 @@
         => Targets: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
         => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
         => in  schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
-         JOIN(21)(INNER)
+         JOIN(22)(INNER)
            => Join Cond: default.d.l_partkey (INT4) = default.part.p_partkey (INT4)
            => target list: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
            => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
@@ -135,14 +135,14 @@
  1: type=Broadcast, tables=default.a
  2: type=Broadcast, tables=default.c
 
-GROUP_BY(35)()
+GROUP_BY(36)()
   => exprs: (sum(default.b.l_quantity (FLOAT8)))
   => target list: ?sum_12 (FLOAT8)
   => out schema:{(1) ?sum_12 (FLOAT8)}
   => in schema:{(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
-   SELECTION(16)
+   SELECTION(20)
      => Search Cond: default.b.l_quantity (FLOAT8) > default.f.avg_quantity (FLOAT8)
-      JOIN(23)(INNER)
+      JOIN(24)(INNER)
         => Join Cond: default.c.o_orderkey (INT4) = default.f.l_orderkey (INT4)
         => target list: default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)
         => out schema: {(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
@@ -160,10 +160,10 @@
                  => target list: default.e.l_orderkey (INT4), avg_quantity (FLOAT8)
                  => out schema:{(2) avg_quantity (FLOAT8), default.e.l_orderkey (INT4)}
                  => in schema:{(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
-                  SCAN(32) on eb_0000000000000_0000_000008
+                  SCAN(33) on eb_0000000000000_0000_000008
                     => out schema: {(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
                     => in schema: {(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
-         JOIN(22)(INNER)
+         JOIN(23)(INNER)
            => Join Cond: default.c.o_orderkey (INT4) = default.b.l_orderkey (INT4)
            => target list: default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)
            => out schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
@@ -181,7 +181,7 @@
                  => Targets: default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8), default.a.l_linenumber (INT4)
                  => out schema: {(3) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)}
                  => in  schema: {(3) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)}
-                  JOIN(20)(INNER)
+                  JOIN(21)(INNER)
                     => Join Cond: default.a.l_partkey (INT4) = default.part.p_partkey (INT4)
                     => target list: default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)
                     => out schema: {(3) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)}
@@ -207,7 +207,7 @@
   => target list: ?sum (FLOAT8)
   => out schema:{(1) ?sum (FLOAT8)}
   => in schema:{(1) ?sum_12 (FLOAT8)}
-   SCAN(36) on eb_0000000000000_0000_000010
+   SCAN(37) on eb_0000000000000_0000_000010
      => out schema: {(1) ?sum_12 (FLOAT8)}
      => in schema: {(1) ?sum_12 (FLOAT8)}
 
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash_NoBroadcast.plan
index 14f4bb4..cbd07fc 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash_NoBroadcast.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash_NoBroadcast.plan
@@ -5,9 +5,9 @@
   => target list: ?sum (FLOAT8)
   => out schema:{(1) ?sum (FLOAT8)}
   => in schema:{(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
-   SELECTION(16)
+   SELECTION(20)
      => Search Cond: default.b.l_quantity (FLOAT8) > default.f.avg_quantity (FLOAT8)
-      JOIN(23)(INNER)
+      JOIN(24)(INNER)
         => Join Cond: default.c.o_orderkey (INT4) = default.f.l_orderkey (INT4)
         => target list: default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)
         => out schema: {(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
@@ -25,7 +25,7 @@
                  => Targets: default.e.l_orderkey (INT4), default.e.l_quantity (FLOAT8)
                  => out schema: {(2) default.e.l_orderkey (INT4), default.e.l_quantity (FLOAT8)}
                  => in  schema: {(2) default.e.l_orderkey (INT4), default.e.l_quantity (FLOAT8)}
-                  JOIN(21)(INNER)
+                  JOIN(22)(INNER)
                     => Join Cond: default.d.l_partkey (INT4) = default.part.p_partkey (INT4)
                     => target list: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
                     => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
@@ -38,7 +38,7 @@
                        => target list: default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)
                        => out schema: {(3) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)}
                        => in schema: {(16) default.d.l_comment (TEXT), default.d.l_commitdate (TEXT), default.d.l_discount (FLOAT8), default.d.l_extendedprice (FLOAT8), default.d.l_linenumber (INT4), default.d.l_linestatus (TEXT), default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8), default.d.l_receiptdate (TEXT), default.d.l_returnflag (TEXT), default.d.l_shipdate (TEXT), default.d.l_shipinstruct (TEXT), default.d.l_shipmode (TEXT), default.d.l_suppkey (INT4), default.d.l_tax (FLOAT8)}
-         JOIN(22)(INNER)
+         JOIN(23)(INNER)
            => Join Cond: default.c.o_orderkey (INT4) = default.b.l_orderkey (INT4)
            => target list: default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)
            => out schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
@@ -52,7 +52,7 @@
               => Targets: default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)
               => out schema: {(2) default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8)}
               => in  schema: {(3) default.b.l_linenumber (INT4), default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8)}
-               JOIN(20)(INNER)
+               JOIN(21)(INNER)
                  => Join Cond: default.a.l_partkey (INT4) = default.part.p_partkey (INT4)
                  => target list: default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)
                  => out schema: {(3) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)}
@@ -142,15 +142,15 @@
      => Targets: default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8), default.a.l_linenumber (INT4)
      => out schema: {(3) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)}
      => in  schema: {(3) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)}
-      JOIN(20)(INNER)
+      JOIN(21)(INNER)
         => Join Cond: default.a.l_partkey (INT4) = default.part.p_partkey (INT4)
         => target list: default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)
         => out schema: {(3) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)}
         => in schema: {(5) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_partkey (INT4), default.a.l_quantity (FLOAT8), default.part.p_partkey (INT4)}
-         SCAN(26) on eb_0000000000000_0000_000002
+         SCAN(27) on eb_0000000000000_0000_000002
            => out schema: {(1) default.part.p_partkey (INT4)}
            => in schema: {(1) default.part.p_partkey (INT4)}
-         SCAN(25) on eb_0000000000000_0000_000001
+         SCAN(26) on eb_0000000000000_0000_000001
            => out schema: {(4) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_partkey (INT4), default.a.l_quantity (FLOAT8)}
            => in schema: {(4) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_partkey (INT4), default.a.l_quantity (FLOAT8)}
 
@@ -202,15 +202,15 @@
 [Outgoing]
 [q_0000000000000_0000] 5 => 10 (type=HASH_SHUFFLE, key=default.c.o_orderkey (INT4), num=32)
 
-JOIN(22)(INNER)
+JOIN(23)(INNER)
   => Join Cond: default.c.o_orderkey (INT4) = default.b.l_orderkey (INT4)
   => target list: default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)
   => out schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
   => in schema: {(3) default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
-   SCAN(28) on eb_0000000000000_0000_000004
+   SCAN(29) on eb_0000000000000_0000_000004
      => out schema: {(1) default.c.o_orderkey (INT4)}
      => in schema: {(1) default.c.o_orderkey (INT4)}
-   SCAN(27) on eb_0000000000000_0000_000003
+   SCAN(28) on eb_0000000000000_0000_000003
      => out schema: {(2) default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)}
      => in schema: {(2) default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)}
 
@@ -225,7 +225,7 @@
 [Outgoing]
 [q_0000000000000_0000] 8 => 9 (type=HASH_SHUFFLE, key=default.e.l_orderkey (INT4), num=32)
 
-GROUP_BY(31)(l_orderkey)
+GROUP_BY(32)(l_orderkey)
   => exprs: (avg(default.e.l_quantity (FLOAT8)))
   => target list: default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)
   => out schema:{(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
@@ -238,15 +238,15 @@
         => Targets: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
         => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
         => in  schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
-         JOIN(21)(INNER)
+         JOIN(22)(INNER)
            => Join Cond: default.d.l_partkey (INT4) = default.part.p_partkey (INT4)
            => target list: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
            => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
            => in schema: {(4) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8), default.part.p_partkey (INT4)}
-            SCAN(30) on eb_0000000000000_0000_000007
+            SCAN(31) on eb_0000000000000_0000_000007
               => out schema: {(1) default.part.p_partkey (INT4)}
               => in schema: {(1) default.part.p_partkey (INT4)}
-            SCAN(29) on eb_0000000000000_0000_000006
+            SCAN(30) on eb_0000000000000_0000_000006
               => out schema: {(3) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)}
               => in schema: {(3) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)}
 
@@ -273,7 +273,7 @@
         => target list: default.e.l_orderkey (INT4), avg_quantity (FLOAT8)
         => out schema:{(2) avg_quantity (FLOAT8), default.e.l_orderkey (INT4)}
         => in schema:{(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
-         SCAN(32) on eb_0000000000000_0000_000008
+         SCAN(33) on eb_0000000000000_0000_000008
            => out schema: {(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
            => in schema: {(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
 
@@ -288,22 +288,22 @@
 [Outgoing]
 [q_0000000000000_0000] 10 => 11 (type=HASH_SHUFFLE, key=, num=1)
 
-GROUP_BY(35)()
+GROUP_BY(36)()
   => exprs: (sum(default.b.l_quantity (FLOAT8)))
   => target list: ?sum_12 (FLOAT8)
   => out schema:{(1) ?sum_12 (FLOAT8)}
   => in schema:{(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
-   SELECTION(16)
+   SELECTION(20)
      => Search Cond: default.b.l_quantity (FLOAT8) > default.f.avg_quantity (FLOAT8)
-      JOIN(23)(INNER)
+      JOIN(24)(INNER)
         => Join Cond: default.c.o_orderkey (INT4) = default.f.l_orderkey (INT4)
         => target list: default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)
         => out schema: {(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
         => in schema: {(4) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4), default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
-         SCAN(34) on eb_0000000000000_0000_000009
+         SCAN(35) on eb_0000000000000_0000_000009
            => out schema: {(2) default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
            => in schema: {(2) default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
-         SCAN(33) on eb_0000000000000_0000_000005
+         SCAN(34) on eb_0000000000000_0000_000005
            => out schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
            => in schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
 
@@ -319,7 +319,7 @@
   => target list: ?sum (FLOAT8)
   => out schema:{(1) ?sum (FLOAT8)}
   => in schema:{(1) ?sum_12 (FLOAT8)}
-   SCAN(36) on eb_0000000000000_0000_000010
+   SCAN(37) on eb_0000000000000_0000_000010
      => out schema: {(1) ?sum_12 (FLOAT8)}
      => in schema: {(1) ?sum_12 (FLOAT8)}
 
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort.plan
index ec3578c..5def40e 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort.plan
@@ -5,9 +5,9 @@
   => target list: ?sum (FLOAT8)
   => out schema:{(1) ?sum (FLOAT8)}
   => in schema:{(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
-   SELECTION(16)
+   SELECTION(20)
      => Search Cond: default.b.l_quantity (FLOAT8) > default.f.avg_quantity (FLOAT8)
-      JOIN(23)(INNER)
+      JOIN(24)(INNER)
         => Join Cond: default.c.o_orderkey (INT4) = default.f.l_orderkey (INT4)
         => target list: default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)
         => out schema: {(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
@@ -25,7 +25,7 @@
                  => Targets: default.e.l_orderkey (INT4), default.e.l_quantity (FLOAT8)
                  => out schema: {(2) default.e.l_orderkey (INT4), default.e.l_quantity (FLOAT8)}
                  => in  schema: {(2) default.e.l_orderkey (INT4), default.e.l_quantity (FLOAT8)}
-                  JOIN(21)(INNER)
+                  JOIN(22)(INNER)
                     => Join Cond: default.d.l_partkey (INT4) = default.part.p_partkey (INT4)
                     => target list: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
                     => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
@@ -38,7 +38,7 @@
                        => target list: default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)
                        => out schema: {(3) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)}
                        => in schema: {(16) default.d.l_comment (TEXT), default.d.l_commitdate (TEXT), default.d.l_discount (FLOAT8), default.d.l_extendedprice (FLOAT8), default.d.l_linenumber (INT4), default.d.l_linestatus (TEXT), default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8), default.d.l_receiptdate (TEXT), default.d.l_returnflag (TEXT), default.d.l_shipdate (TEXT), default.d.l_shipinstruct (TEXT), default.d.l_shipmode (TEXT), default.d.l_suppkey (INT4), default.d.l_tax (FLOAT8)}
-         JOIN(22)(INNER)
+         JOIN(23)(INNER)
            => Join Cond: default.c.o_orderkey (INT4) = default.b.l_orderkey (INT4)
            => target list: default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)
            => out schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
@@ -52,7 +52,7 @@
               => Targets: default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)
               => out schema: {(2) default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8)}
               => in  schema: {(3) default.b.l_linenumber (INT4), default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8)}
-               JOIN(20)(INNER)
+               JOIN(21)(INNER)
                  => Join Cond: default.a.l_partkey (INT4) = default.part.p_partkey (INT4)
                  => target list: default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)
                  => out schema: {(3) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)}
@@ -93,7 +93,7 @@
 [Enforcers]
  0: type=Broadcast, tables=default.part
 
-GROUP_BY(31)(l_orderkey)
+GROUP_BY(32)(l_orderkey)
   => exprs: (avg(default.e.l_quantity (FLOAT8)))
   => target list: default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)
   => out schema:{(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
@@ -106,7 +106,7 @@
         => Targets: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
         => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
         => in  schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
-         JOIN(21)(INNER)
+         JOIN(22)(INNER)
            => Join Cond: default.d.l_partkey (INT4) = default.part.p_partkey (INT4)
            => target list: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
            => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
@@ -135,14 +135,14 @@
  1: type=Broadcast, tables=default.a
  2: type=Broadcast, tables=default.c
 
-GROUP_BY(35)()
+GROUP_BY(36)()
   => exprs: (sum(default.b.l_quantity (FLOAT8)))
   => target list: ?sum_12 (FLOAT8)
   => out schema:{(1) ?sum_12 (FLOAT8)}
   => in schema:{(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
-   SELECTION(16)
+   SELECTION(20)
      => Search Cond: default.b.l_quantity (FLOAT8) > default.f.avg_quantity (FLOAT8)
-      JOIN(23)(INNER)
+      JOIN(24)(INNER)
         => Join Cond: default.c.o_orderkey (INT4) = default.f.l_orderkey (INT4)
         => target list: default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)
         => out schema: {(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
@@ -160,10 +160,10 @@
                  => target list: default.e.l_orderkey (INT4), avg_quantity (FLOAT8)
                  => out schema:{(2) avg_quantity (FLOAT8), default.e.l_orderkey (INT4)}
                  => in schema:{(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
-                  SCAN(32) on eb_0000000000000_0000_000008
+                  SCAN(33) on eb_0000000000000_0000_000008
                     => out schema: {(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
                     => in schema: {(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
-         JOIN(22)(INNER)
+         JOIN(23)(INNER)
            => Join Cond: default.c.o_orderkey (INT4) = default.b.l_orderkey (INT4)
            => target list: default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)
            => out schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
@@ -181,7 +181,7 @@
                  => Targets: default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8), default.a.l_linenumber (INT4)
                  => out schema: {(3) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)}
                  => in  schema: {(3) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)}
-                  JOIN(20)(INNER)
+                  JOIN(21)(INNER)
                     => Join Cond: default.a.l_partkey (INT4) = default.part.p_partkey (INT4)
                     => target list: default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)
                     => out schema: {(3) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)}
@@ -207,7 +207,7 @@
   => target list: ?sum (FLOAT8)
   => out schema:{(1) ?sum (FLOAT8)}
   => in schema:{(1) ?sum_12 (FLOAT8)}
-   SCAN(36) on eb_0000000000000_0000_000010
+   SCAN(37) on eb_0000000000000_0000_000010
      => out schema: {(1) ?sum_12 (FLOAT8)}
      => in schema: {(1) ?sum_12 (FLOAT8)}
 
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort_NoBroadcast.plan
index 14f4bb4..cbd07fc 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort_NoBroadcast.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort_NoBroadcast.plan
@@ -5,9 +5,9 @@
   => target list: ?sum (FLOAT8)
   => out schema:{(1) ?sum (FLOAT8)}
   => in schema:{(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
-   SELECTION(16)
+   SELECTION(20)
      => Search Cond: default.b.l_quantity (FLOAT8) > default.f.avg_quantity (FLOAT8)
-      JOIN(23)(INNER)
+      JOIN(24)(INNER)
         => Join Cond: default.c.o_orderkey (INT4) = default.f.l_orderkey (INT4)
         => target list: default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)
         => out schema: {(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
@@ -25,7 +25,7 @@
                  => Targets: default.e.l_orderkey (INT4), default.e.l_quantity (FLOAT8)
                  => out schema: {(2) default.e.l_orderkey (INT4), default.e.l_quantity (FLOAT8)}
                  => in  schema: {(2) default.e.l_orderkey (INT4), default.e.l_quantity (FLOAT8)}
-                  JOIN(21)(INNER)
+                  JOIN(22)(INNER)
                     => Join Cond: default.d.l_partkey (INT4) = default.part.p_partkey (INT4)
                     => target list: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
                     => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
@@ -38,7 +38,7 @@
                        => target list: default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)
                        => out schema: {(3) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)}
                        => in schema: {(16) default.d.l_comment (TEXT), default.d.l_commitdate (TEXT), default.d.l_discount (FLOAT8), default.d.l_extendedprice (FLOAT8), default.d.l_linenumber (INT4), default.d.l_linestatus (TEXT), default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8), default.d.l_receiptdate (TEXT), default.d.l_returnflag (TEXT), default.d.l_shipdate (TEXT), default.d.l_shipinstruct (TEXT), default.d.l_shipmode (TEXT), default.d.l_suppkey (INT4), default.d.l_tax (FLOAT8)}
-         JOIN(22)(INNER)
+         JOIN(23)(INNER)
            => Join Cond: default.c.o_orderkey (INT4) = default.b.l_orderkey (INT4)
            => target list: default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)
            => out schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
@@ -52,7 +52,7 @@
               => Targets: default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)
               => out schema: {(2) default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8)}
               => in  schema: {(3) default.b.l_linenumber (INT4), default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8)}
-               JOIN(20)(INNER)
+               JOIN(21)(INNER)
                  => Join Cond: default.a.l_partkey (INT4) = default.part.p_partkey (INT4)
                  => target list: default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)
                  => out schema: {(3) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)}
@@ -142,15 +142,15 @@
      => Targets: default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8), default.a.l_linenumber (INT4)
      => out schema: {(3) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)}
      => in  schema: {(3) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)}
-      JOIN(20)(INNER)
+      JOIN(21)(INNER)
         => Join Cond: default.a.l_partkey (INT4) = default.part.p_partkey (INT4)
         => target list: default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)
         => out schema: {(3) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_quantity (FLOAT8)}
         => in schema: {(5) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_partkey (INT4), default.a.l_quantity (FLOAT8), default.part.p_partkey (INT4)}
-         SCAN(26) on eb_0000000000000_0000_000002
+         SCAN(27) on eb_0000000000000_0000_000002
            => out schema: {(1) default.part.p_partkey (INT4)}
            => in schema: {(1) default.part.p_partkey (INT4)}
-         SCAN(25) on eb_0000000000000_0000_000001
+         SCAN(26) on eb_0000000000000_0000_000001
            => out schema: {(4) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_partkey (INT4), default.a.l_quantity (FLOAT8)}
            => in schema: {(4) default.a.l_linenumber (INT4), default.a.l_orderkey (INT4), default.a.l_partkey (INT4), default.a.l_quantity (FLOAT8)}
 
@@ -202,15 +202,15 @@
 [Outgoing]
 [q_0000000000000_0000] 5 => 10 (type=HASH_SHUFFLE, key=default.c.o_orderkey (INT4), num=32)
 
-JOIN(22)(INNER)
+JOIN(23)(INNER)
   => Join Cond: default.c.o_orderkey (INT4) = default.b.l_orderkey (INT4)
   => target list: default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)
   => out schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
   => in schema: {(3) default.b.l_orderkey (INT4), default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
-   SCAN(28) on eb_0000000000000_0000_000004
+   SCAN(29) on eb_0000000000000_0000_000004
      => out schema: {(1) default.c.o_orderkey (INT4)}
      => in schema: {(1) default.c.o_orderkey (INT4)}
-   SCAN(27) on eb_0000000000000_0000_000003
+   SCAN(28) on eb_0000000000000_0000_000003
      => out schema: {(2) default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)}
      => in schema: {(2) default.b.l_quantity (FLOAT8), default.b.l_orderkey (INT4)}
 
@@ -225,7 +225,7 @@
 [Outgoing]
 [q_0000000000000_0000] 8 => 9 (type=HASH_SHUFFLE, key=default.e.l_orderkey (INT4), num=32)
 
-GROUP_BY(31)(l_orderkey)
+GROUP_BY(32)(l_orderkey)
   => exprs: (avg(default.e.l_quantity (FLOAT8)))
   => target list: default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)
   => out schema:{(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
@@ -238,15 +238,15 @@
         => Targets: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
         => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
         => in  schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
-         JOIN(21)(INNER)
+         JOIN(22)(INNER)
            => Join Cond: default.d.l_partkey (INT4) = default.part.p_partkey (INT4)
            => target list: default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)
            => out schema: {(2) default.d.l_orderkey (INT4), default.d.l_quantity (FLOAT8)}
            => in schema: {(4) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8), default.part.p_partkey (INT4)}
-            SCAN(30) on eb_0000000000000_0000_000007
+            SCAN(31) on eb_0000000000000_0000_000007
               => out schema: {(1) default.part.p_partkey (INT4)}
               => in schema: {(1) default.part.p_partkey (INT4)}
-            SCAN(29) on eb_0000000000000_0000_000006
+            SCAN(30) on eb_0000000000000_0000_000006
               => out schema: {(3) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)}
               => in schema: {(3) default.d.l_orderkey (INT4), default.d.l_partkey (INT4), default.d.l_quantity (FLOAT8)}
 
@@ -273,7 +273,7 @@
         => target list: default.e.l_orderkey (INT4), avg_quantity (FLOAT8)
         => out schema:{(2) avg_quantity (FLOAT8), default.e.l_orderkey (INT4)}
         => in schema:{(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
-         SCAN(32) on eb_0000000000000_0000_000008
+         SCAN(33) on eb_0000000000000_0000_000008
            => out schema: {(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
            => in schema: {(2) default.e.l_orderkey (INT4), ?avg_11 (PROTOBUF)}
 
@@ -288,22 +288,22 @@
 [Outgoing]
 [q_0000000000000_0000] 10 => 11 (type=HASH_SHUFFLE, key=, num=1)
 
-GROUP_BY(35)()
+GROUP_BY(36)()
   => exprs: (sum(default.b.l_quantity (FLOAT8)))
   => target list: ?sum_12 (FLOAT8)
   => out schema:{(1) ?sum_12 (FLOAT8)}
   => in schema:{(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
-   SELECTION(16)
+   SELECTION(20)
      => Search Cond: default.b.l_quantity (FLOAT8) > default.f.avg_quantity (FLOAT8)
-      JOIN(23)(INNER)
+      JOIN(24)(INNER)
         => Join Cond: default.c.o_orderkey (INT4) = default.f.l_orderkey (INT4)
         => target list: default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)
         => out schema: {(2) default.b.l_quantity (FLOAT8), default.f.avg_quantity (FLOAT8)}
         => in schema: {(4) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4), default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
-         SCAN(34) on eb_0000000000000_0000_000009
+         SCAN(35) on eb_0000000000000_0000_000009
            => out schema: {(2) default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
            => in schema: {(2) default.f.avg_quantity (FLOAT8), default.f.l_orderkey (INT4)}
-         SCAN(33) on eb_0000000000000_0000_000005
+         SCAN(34) on eb_0000000000000_0000_000005
            => out schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
            => in schema: {(2) default.b.l_quantity (FLOAT8), default.c.o_orderkey (INT4)}
 
@@ -319,7 +319,7 @@
   => target list: ?sum (FLOAT8)
   => out schema:{(1) ?sum (FLOAT8)}
   => in schema:{(1) ?sum_12 (FLOAT8)}
-   SCAN(36) on eb_0000000000000_0000_000010
+   SCAN(37) on eb_0000000000000_0000_000010
      => out schema: {(1) ?sum_12 (FLOAT8)}
      => in schema: {(1) ?sum_12 (FLOAT8)}
 
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash.plan
index 8d739f6..f249f0e 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash.plan
@@ -1,8 +1,8 @@
 explain
 -------------------------------
-SELECTION(9)
+SELECTION(12)
   => Search Cond: default.t.n_nationkey (INT4) > default.s.s_suppkey (INT4)
-   JOIN(14)(INNER)
+   JOIN(15)(INNER)
      => Join Cond: default.s.s_nationkey (INT4) = default.t.n_nationkey (INT4)
      => target list: default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)
      => out schema: {(6) default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
@@ -11,7 +11,7 @@
         => Targets: default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)
         => out schema: {(4) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
         => in  schema: {(4) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
-         JOIN(12)(INNER)
+         JOIN(13)(INNER)
            => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
            => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
            => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
@@ -25,7 +25,7 @@
               => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
               => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
               => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-      JOIN(13)(INNER)
+      JOIN(14)(INNER)
         => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
         => target list: default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
         => out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
@@ -61,9 +61,9 @@
  1: type=Broadcast, tables=default.s
  2: type=Broadcast, tables=default.r
 
-SELECTION(9)
+SELECTION(12)
   => Search Cond: default.t.n_nationkey (INT4) > default.s.s_suppkey (INT4)
-   JOIN(14)(INNER)
+   JOIN(15)(INNER)
      => Join Cond: default.s.s_nationkey (INT4) = default.t.n_nationkey (INT4)
      => target list: default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)
      => out schema: {(6) default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
@@ -76,7 +76,7 @@
            => Targets: default.n.n_nationkey (INT4), default.n.n_name (TEXT), default.n.n_regionkey (INT4), default.n.n_comment (TEXT)
            => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
            => in  schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-            JOIN(12)(INNER)
+            JOIN(13)(INNER)
               => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
               => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
               => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
@@ -90,7 +90,7 @@
                  => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
                  => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
                  => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-      JOIN(13)(INNER)
+      JOIN(14)(INNER)
         => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
         => target list: default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
         => out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash_NoBroadcast.plan
index d80eea0..554ee76 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash_NoBroadcast.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash_NoBroadcast.plan
@@ -1,8 +1,8 @@
 explain
 -------------------------------
-SELECTION(9)
+SELECTION(12)
   => Search Cond: default.t.n_nationkey (INT4) > default.s.s_suppkey (INT4)
-   JOIN(14)(INNER)
+   JOIN(15)(INNER)
      => Join Cond: default.s.s_nationkey (INT4) = default.t.n_nationkey (INT4)
      => target list: default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)
      => out schema: {(6) default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
@@ -11,7 +11,7 @@
         => Targets: default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)
         => out schema: {(4) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
         => in  schema: {(4) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
-         JOIN(12)(INNER)
+         JOIN(13)(INNER)
            => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
            => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
            => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
@@ -25,7 +25,7 @@
               => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
               => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
               => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-      JOIN(13)(INNER)
+      JOIN(14)(INNER)
         => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
         => target list: default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
         => out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
@@ -124,15 +124,15 @@
 [Outgoing]
 [q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.s.s_nationkey (INT4), num=32)
 
-JOIN(13)(INNER)
+JOIN(14)(INNER)
   => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
   => target list: default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
   => out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
   => in schema: {(4) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
-   SCAN(17) on eb_0000000000000_0000_000002
+   SCAN(18) on eb_0000000000000_0000_000002
      => out schema: {(2) default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
      => in schema: {(2) default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
-   SCAN(16) on eb_0000000000000_0000_000001
+   SCAN(17) on eb_0000000000000_0000_000001
      => out schema: {(2) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)}
      => in schema: {(2) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)}
 
@@ -155,15 +155,15 @@
      => Targets: default.n.n_nationkey (INT4), default.n.n_name (TEXT), default.n.n_regionkey (INT4), default.n.n_comment (TEXT)
      => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
      => in  schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-      JOIN(12)(INNER)
+      JOIN(13)(INNER)
         => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
         => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
         => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
         => in schema: {(5) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-         SCAN(19) on eb_0000000000000_0000_000005
+         SCAN(20) on eb_0000000000000_0000_000005
            => out schema: {(1) default.r.r_regionkey (INT4)}
            => in schema: {(1) default.r.r_regionkey (INT4)}
-         SCAN(18) on eb_0000000000000_0000_000004
+         SCAN(19) on eb_0000000000000_0000_000004
            => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
            => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
 
@@ -175,17 +175,17 @@
 [q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.s.s_nationkey (INT4), num=32)
 [q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.t.n_nationkey (INT4), num=32)
 
-SELECTION(9)
+SELECTION(12)
   => Search Cond: default.t.n_nationkey (INT4) > default.s.s_suppkey (INT4)
-   JOIN(14)(INNER)
+   JOIN(15)(INNER)
      => Join Cond: default.s.s_nationkey (INT4) = default.t.n_nationkey (INT4)
      => target list: default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)
      => out schema: {(6) default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
      => in schema: {(7) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
-      SCAN(21) on eb_0000000000000_0000_000006
+      SCAN(22) on eb_0000000000000_0000_000006
         => out schema: {(4) default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
         => in schema: {(4) default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
-      SCAN(20) on eb_0000000000000_0000_000003
+      SCAN(21) on eb_0000000000000_0000_000003
         => out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
         => in schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
 
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort.plan
index 8d739f6..f249f0e 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort.plan
@@ -1,8 +1,8 @@
 explain
 -------------------------------
-SELECTION(9)
+SELECTION(12)
   => Search Cond: default.t.n_nationkey (INT4) > default.s.s_suppkey (INT4)
-   JOIN(14)(INNER)
+   JOIN(15)(INNER)
      => Join Cond: default.s.s_nationkey (INT4) = default.t.n_nationkey (INT4)
      => target list: default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)
      => out schema: {(6) default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
@@ -11,7 +11,7 @@
         => Targets: default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)
         => out schema: {(4) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
         => in  schema: {(4) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
-         JOIN(12)(INNER)
+         JOIN(13)(INNER)
            => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
            => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
            => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
@@ -25,7 +25,7 @@
               => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
               => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
               => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-      JOIN(13)(INNER)
+      JOIN(14)(INNER)
         => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
         => target list: default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
         => out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
@@ -61,9 +61,9 @@
  1: type=Broadcast, tables=default.s
  2: type=Broadcast, tables=default.r
 
-SELECTION(9)
+SELECTION(12)
   => Search Cond: default.t.n_nationkey (INT4) > default.s.s_suppkey (INT4)
-   JOIN(14)(INNER)
+   JOIN(15)(INNER)
      => Join Cond: default.s.s_nationkey (INT4) = default.t.n_nationkey (INT4)
      => target list: default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)
      => out schema: {(6) default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
@@ -76,7 +76,7 @@
            => Targets: default.n.n_nationkey (INT4), default.n.n_name (TEXT), default.n.n_regionkey (INT4), default.n.n_comment (TEXT)
            => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
            => in  schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-            JOIN(12)(INNER)
+            JOIN(13)(INNER)
               => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
               => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
               => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
@@ -90,7 +90,7 @@
                  => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
                  => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
                  => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-      JOIN(13)(INNER)
+      JOIN(14)(INNER)
         => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
         => target list: default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
         => out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort_NoBroadcast.plan
index d80eea0..554ee76 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort_NoBroadcast.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort_NoBroadcast.plan
@@ -1,8 +1,8 @@
 explain
 -------------------------------
-SELECTION(9)
+SELECTION(12)
   => Search Cond: default.t.n_nationkey (INT4) > default.s.s_suppkey (INT4)
-   JOIN(14)(INNER)
+   JOIN(15)(INNER)
      => Join Cond: default.s.s_nationkey (INT4) = default.t.n_nationkey (INT4)
      => target list: default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)
      => out schema: {(6) default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
@@ -11,7 +11,7 @@
         => Targets: default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)
         => out schema: {(4) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
         => in  schema: {(4) default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
-         JOIN(12)(INNER)
+         JOIN(13)(INNER)
            => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
            => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
            => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
@@ -25,7 +25,7 @@
               => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
               => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
               => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-      JOIN(13)(INNER)
+      JOIN(14)(INNER)
         => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
         => target list: default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
         => out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
@@ -124,15 +124,15 @@
 [Outgoing]
 [q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.s.s_nationkey (INT4), num=32)
 
-JOIN(13)(INNER)
+JOIN(14)(INNER)
   => Join Cond: default.s.s_suppkey (INT4) = default.ps.ps_suppkey (INT4)
   => target list: default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)
   => out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
   => in schema: {(4) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
-   SCAN(17) on eb_0000000000000_0000_000002
+   SCAN(18) on eb_0000000000000_0000_000002
      => out schema: {(2) default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
      => in schema: {(2) default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
-   SCAN(16) on eb_0000000000000_0000_000001
+   SCAN(17) on eb_0000000000000_0000_000001
      => out schema: {(2) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)}
      => in schema: {(2) default.ps.ps_availqty (INT4), default.ps.ps_suppkey (INT4)}
 
@@ -155,15 +155,15 @@
      => Targets: default.n.n_nationkey (INT4), default.n.n_name (TEXT), default.n.n_regionkey (INT4), default.n.n_comment (TEXT)
      => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
      => in  schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-      JOIN(12)(INNER)
+      JOIN(13)(INNER)
         => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
         => target list: default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
         => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
         => in schema: {(5) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-         SCAN(19) on eb_0000000000000_0000_000005
+         SCAN(20) on eb_0000000000000_0000_000005
            => out schema: {(1) default.r.r_regionkey (INT4)}
            => in schema: {(1) default.r.r_regionkey (INT4)}
-         SCAN(18) on eb_0000000000000_0000_000004
+         SCAN(19) on eb_0000000000000_0000_000004
            => out schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
            => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
 
@@ -175,17 +175,17 @@
 [q_0000000000000_0000] 3 => 7 (type=HASH_SHUFFLE, key=default.s.s_nationkey (INT4), num=32)
 [q_0000000000000_0000] 6 => 7 (type=HASH_SHUFFLE, key=default.t.n_nationkey (INT4), num=32)
 
-SELECTION(9)
+SELECTION(12)
   => Search Cond: default.t.n_nationkey (INT4) > default.s.s_suppkey (INT4)
-   JOIN(14)(INNER)
+   JOIN(15)(INNER)
      => Join Cond: default.s.s_nationkey (INT4) = default.t.n_nationkey (INT4)
      => target list: default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)
      => out schema: {(6) default.ps.ps_availqty (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
      => in schema: {(7) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4), default.t.n_comment (TEXT), default.t.n_name (TEXT), default.t.n_nationkey (INT4), default.t.n_regionkey (INT4)}
-      SCAN(21) on eb_0000000000000_0000_000006
+      SCAN(22) on eb_0000000000000_0000_000006
         => out schema: {(4) default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
         => in schema: {(4) default.t.n_nationkey (INT4), default.t.n_name (TEXT), default.t.n_regionkey (INT4), default.t.n_comment (TEXT)}
-      SCAN(20) on eb_0000000000000_0000_000003
+      SCAN(21) on eb_0000000000000_0000_000003
         => out schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
         => in schema: {(3) default.ps.ps_availqty (INT4), default.s.s_nationkey (INT4), default.s.s_suppkey (INT4)}
 
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Hash.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Hash.plan
index c0b6f82..cf59edb 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Hash.plan
@@ -2,37 +2,39 @@
 -------------------------------
 SORT(8)
   => Sort Keys: default.n.n_nationkey (INT4) (asc)
-   JOIN(12)(INNER)
-     => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
-     => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
-     => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
-     => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-      SCAN(0) on default.nation as n
-        => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
-        => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-        => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-      TABLE_SUBQUERY(6) as default.t
-        => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
-        => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-        => in  schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-         GROUP_BY(4)(r_regionkey)
-           => exprs: (count())
-           => target list: default.r.r_regionkey (INT4), cnt (INT8)
-           => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
-           => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-            JOIN(11)(INNER)
-              => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
-              => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
-              => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-              => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-               SCAN(2) on default.region as r
-                 => target list: default.r.r_regionkey (INT4)
-                 => out schema: {(1) default.r.r_regionkey (INT4)}
-                 => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
-               SCAN(1) on default.nation as n
-                 => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
-                 => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-                 => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+   SELECTION(11)
+     => Search Cond: CAST (default.n.n_nationkey (INT4) AS INT8) > default.t.cnt (INT8)
+      JOIN(13)(INNER)
+        => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
+        => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
+        => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+        => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+         SCAN(0) on default.nation as n
+           => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+           => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+           => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+         TABLE_SUBQUERY(6) as default.t
+           => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
+           => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+           => in  schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+            GROUP_BY(4)(r_regionkey)
+              => exprs: (count())
+              => target list: default.r.r_regionkey (INT4), cnt (INT8)
+              => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
+              => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+               JOIN(12)(INNER)
+                 => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+                 => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
+                 => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+                 => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+                  SCAN(2) on default.region as r
+                    => target list: default.r.r_regionkey (INT4)
+                    => out schema: {(1) default.r.r_regionkey (INT4)}
+                    => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+                  SCAN(1) on default.nation as n
+                    => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+                    => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+                    => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
 explain
 -------------------------------
 -------------------------------------------------------------------------------
@@ -61,12 +63,12 @@
 [Enforcers]
  0: type=Broadcast, tables=default.r
 
-GROUP_BY(16)(r_regionkey)
+GROUP_BY(17)(r_regionkey)
   => exprs: (count())
-  => target list: default.r.r_regionkey (INT4), ?count_4 (INT8)
-  => out schema:{(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+  => target list: default.r.r_regionkey (INT4), ?count_5 (INT8)
+  => out schema:{(2) default.r.r_regionkey (INT4), ?count_5 (INT8)}
   => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-   JOIN(11)(INNER)
+   JOIN(12)(INNER)
      => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
      => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
      => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
@@ -93,33 +95,35 @@
 [Enforcers]
  0: type=Broadcast, tables=default.n
 
-SORT(20)
+SORT(21)
   => Sort Keys: default.n.n_nationkey (INT4) (asc)
-   JOIN(12)(INNER)
-     => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
-     => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
-     => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
-     => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-      SCAN(0) on default.nation as n
-        => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
-        => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-        => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-      TABLE_SUBQUERY(6) as default.t
-        => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
-        => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-        => in  schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-         PROJECTION(5)
-           => Targets: default.r.r_regionkey (INT4), cnt (INT8)
-           => out schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
-           => in  schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
-            GROUP_BY(4)(r_regionkey)
-              => exprs: (count(?count_4 (INT8)))
-              => target list: default.r.r_regionkey (INT4), cnt (INT8)
-              => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
-              => in schema:{(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
-               SCAN(17) on eb_0000000000000_0000_000003
-                 => out schema: {(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
-                 => in schema: {(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+   SELECTION(11)
+     => Search Cond: CAST (default.n.n_nationkey (INT4) AS INT8) > default.t.cnt (INT8)
+      JOIN(13)(INNER)
+        => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
+        => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
+        => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+        => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+         SCAN(0) on default.nation as n
+           => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+           => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+           => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+         TABLE_SUBQUERY(6) as default.t
+           => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
+           => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+           => in  schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+            PROJECTION(5)
+              => Targets: default.r.r_regionkey (INT4), cnt (INT8)
+              => out schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
+              => in  schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
+               GROUP_BY(4)(r_regionkey)
+                 => exprs: (count(?count_5 (INT8)))
+                 => target list: default.r.r_regionkey (INT4), cnt (INT8)
+                 => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
+                 => in schema:{(2) default.r.r_regionkey (INT4), ?count_5 (INT8)}
+                  SCAN(18) on eb_0000000000000_0000_000003
+                    => out schema: {(2) default.r.r_regionkey (INT4), ?count_5 (INT8)}
+                    => in schema: {(2) default.r.r_regionkey (INT4), ?count_5 (INT8)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000007 [ROOT]
@@ -133,7 +137,7 @@
 
 SORT(8)
   => Sort Keys: default.n.n_nationkey (INT4) (asc)
-   SCAN(21) on eb_0000000000000_0000_000006
+   SCAN(22) on eb_0000000000000_0000_000006
      => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
      => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
 
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Hash_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Hash_NoBroadcast.plan
index 6509afc..d2d5617 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Hash_NoBroadcast.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Hash_NoBroadcast.plan
@@ -2,37 +2,39 @@
 -------------------------------
 SORT(8)
   => Sort Keys: default.n.n_nationkey (INT4) (asc)
-   JOIN(12)(INNER)
-     => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
-     => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
-     => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
-     => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-      SCAN(0) on default.nation as n
-        => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
-        => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-        => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-      TABLE_SUBQUERY(6) as default.t
-        => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
-        => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-        => in  schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-         GROUP_BY(4)(r_regionkey)
-           => exprs: (count())
-           => target list: default.r.r_regionkey (INT4), cnt (INT8)
-           => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
-           => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-            JOIN(11)(INNER)
-              => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
-              => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
-              => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-              => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-               SCAN(2) on default.region as r
-                 => target list: default.r.r_regionkey (INT4)
-                 => out schema: {(1) default.r.r_regionkey (INT4)}
-                 => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
-               SCAN(1) on default.nation as n
-                 => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
-                 => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-                 => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+   SELECTION(11)
+     => Search Cond: CAST (default.n.n_nationkey (INT4) AS INT8) > default.t.cnt (INT8)
+      JOIN(13)(INNER)
+        => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
+        => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
+        => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+        => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+         SCAN(0) on default.nation as n
+           => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+           => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+           => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+         TABLE_SUBQUERY(6) as default.t
+           => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
+           => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+           => in  schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+            GROUP_BY(4)(r_regionkey)
+              => exprs: (count())
+              => target list: default.r.r_regionkey (INT4), cnt (INT8)
+              => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
+              => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+               JOIN(12)(INNER)
+                 => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+                 => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
+                 => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+                 => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+                  SCAN(2) on default.region as r
+                    => target list: default.r.r_regionkey (INT4)
+                    => out schema: {(1) default.r.r_regionkey (INT4)}
+                    => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+                  SCAN(1) on default.nation as n
+                    => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+                    => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+                    => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
 explain
 -------------------------------
 -------------------------------------------------------------------------------
@@ -94,20 +96,20 @@
 [Outgoing]
 [q_0000000000000_0000] 3 => 4 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
 
-GROUP_BY(16)(r_regionkey)
+GROUP_BY(17)(r_regionkey)
   => exprs: (count())
-  => target list: default.r.r_regionkey (INT4), ?count_4 (INT8)
-  => out schema:{(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+  => target list: default.r.r_regionkey (INT4), ?count_5 (INT8)
+  => out schema:{(2) default.r.r_regionkey (INT4), ?count_5 (INT8)}
   => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-   JOIN(11)(INNER)
+   JOIN(12)(INNER)
      => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
      => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
      => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
      => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-      SCAN(15) on eb_0000000000000_0000_000002
+      SCAN(16) on eb_0000000000000_0000_000002
         => out schema: {(1) default.r.r_regionkey (INT4)}
         => in schema: {(1) default.r.r_regionkey (INT4)}
-      SCAN(14) on eb_0000000000000_0000_000001
+      SCAN(15) on eb_0000000000000_0000_000001
         => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
         => in schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
 
@@ -130,13 +132,13 @@
      => out schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
      => in  schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
       GROUP_BY(4)(r_regionkey)
-        => exprs: (count(?count_4 (INT8)))
+        => exprs: (count(?count_5 (INT8)))
         => target list: default.r.r_regionkey (INT4), cnt (INT8)
         => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
-        => in schema:{(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
-         SCAN(17) on eb_0000000000000_0000_000003
-           => out schema: {(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
-           => in schema: {(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+        => in schema:{(2) default.r.r_regionkey (INT4), ?count_5 (INT8)}
+         SCAN(18) on eb_0000000000000_0000_000003
+           => out schema: {(2) default.r.r_regionkey (INT4), ?count_5 (INT8)}
+           => in schema: {(2) default.r.r_regionkey (INT4), ?count_5 (INT8)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000005 [LEAF]
@@ -161,19 +163,21 @@
 [Outgoing]
 [q_0000000000000_0000] 6 => 7 (type=RANGE_SHUFFLE, key=default.n.n_nationkey (INT4), num=32)
 
-SORT(20)
+SORT(21)
   => Sort Keys: default.n.n_nationkey (INT4) (asc)
-   JOIN(12)(INNER)
-     => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
-     => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
-     => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
-     => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-      SCAN(19) on eb_0000000000000_0000_000005
-        => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-        => in schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-      SCAN(18) on eb_0000000000000_0000_000004
-        => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-        => in schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+   SELECTION(11)
+     => Search Cond: CAST (default.n.n_nationkey (INT4) AS INT8) > default.t.cnt (INT8)
+      JOIN(13)(INNER)
+        => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
+        => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
+        => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+        => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+         SCAN(20) on eb_0000000000000_0000_000005
+           => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+           => in schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+         SCAN(19) on eb_0000000000000_0000_000004
+           => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+           => in schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000007 [ROOT]
@@ -187,7 +191,7 @@
 
 SORT(8)
   => Sort Keys: default.n.n_nationkey (INT4) (asc)
-   SCAN(21) on eb_0000000000000_0000_000006
+   SCAN(22) on eb_0000000000000_0000_000006
      => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
      => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
 
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Sort.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Sort.plan
index c0b6f82..cf59edb 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Sort.plan
@@ -2,37 +2,39 @@
 -------------------------------
 SORT(8)
   => Sort Keys: default.n.n_nationkey (INT4) (asc)
-   JOIN(12)(INNER)
-     => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
-     => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
-     => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
-     => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-      SCAN(0) on default.nation as n
-        => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
-        => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-        => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-      TABLE_SUBQUERY(6) as default.t
-        => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
-        => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-        => in  schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-         GROUP_BY(4)(r_regionkey)
-           => exprs: (count())
-           => target list: default.r.r_regionkey (INT4), cnt (INT8)
-           => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
-           => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-            JOIN(11)(INNER)
-              => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
-              => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
-              => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-              => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-               SCAN(2) on default.region as r
-                 => target list: default.r.r_regionkey (INT4)
-                 => out schema: {(1) default.r.r_regionkey (INT4)}
-                 => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
-               SCAN(1) on default.nation as n
-                 => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
-                 => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-                 => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+   SELECTION(11)
+     => Search Cond: CAST (default.n.n_nationkey (INT4) AS INT8) > default.t.cnt (INT8)
+      JOIN(13)(INNER)
+        => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
+        => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
+        => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+        => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+         SCAN(0) on default.nation as n
+           => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+           => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+           => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+         TABLE_SUBQUERY(6) as default.t
+           => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
+           => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+           => in  schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+            GROUP_BY(4)(r_regionkey)
+              => exprs: (count())
+              => target list: default.r.r_regionkey (INT4), cnt (INT8)
+              => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
+              => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+               JOIN(12)(INNER)
+                 => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+                 => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
+                 => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+                 => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+                  SCAN(2) on default.region as r
+                    => target list: default.r.r_regionkey (INT4)
+                    => out schema: {(1) default.r.r_regionkey (INT4)}
+                    => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+                  SCAN(1) on default.nation as n
+                    => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+                    => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+                    => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
 explain
 -------------------------------
 -------------------------------------------------------------------------------
@@ -61,12 +63,12 @@
 [Enforcers]
  0: type=Broadcast, tables=default.r
 
-GROUP_BY(16)(r_regionkey)
+GROUP_BY(17)(r_regionkey)
   => exprs: (count())
-  => target list: default.r.r_regionkey (INT4), ?count_4 (INT8)
-  => out schema:{(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+  => target list: default.r.r_regionkey (INT4), ?count_5 (INT8)
+  => out schema:{(2) default.r.r_regionkey (INT4), ?count_5 (INT8)}
   => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-   JOIN(11)(INNER)
+   JOIN(12)(INNER)
      => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
      => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
      => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
@@ -93,33 +95,35 @@
 [Enforcers]
  0: type=Broadcast, tables=default.n
 
-SORT(20)
+SORT(21)
   => Sort Keys: default.n.n_nationkey (INT4) (asc)
-   JOIN(12)(INNER)
-     => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
-     => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
-     => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
-     => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-      SCAN(0) on default.nation as n
-        => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
-        => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-        => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-      TABLE_SUBQUERY(6) as default.t
-        => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
-        => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-        => in  schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-         PROJECTION(5)
-           => Targets: default.r.r_regionkey (INT4), cnt (INT8)
-           => out schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
-           => in  schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
-            GROUP_BY(4)(r_regionkey)
-              => exprs: (count(?count_4 (INT8)))
-              => target list: default.r.r_regionkey (INT4), cnt (INT8)
-              => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
-              => in schema:{(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
-               SCAN(17) on eb_0000000000000_0000_000003
-                 => out schema: {(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
-                 => in schema: {(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+   SELECTION(11)
+     => Search Cond: CAST (default.n.n_nationkey (INT4) AS INT8) > default.t.cnt (INT8)
+      JOIN(13)(INNER)
+        => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
+        => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
+        => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+        => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+         SCAN(0) on default.nation as n
+           => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+           => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+           => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+         TABLE_SUBQUERY(6) as default.t
+           => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
+           => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+           => in  schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+            PROJECTION(5)
+              => Targets: default.r.r_regionkey (INT4), cnt (INT8)
+              => out schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
+              => in  schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
+               GROUP_BY(4)(r_regionkey)
+                 => exprs: (count(?count_5 (INT8)))
+                 => target list: default.r.r_regionkey (INT4), cnt (INT8)
+                 => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
+                 => in schema:{(2) default.r.r_regionkey (INT4), ?count_5 (INT8)}
+                  SCAN(18) on eb_0000000000000_0000_000003
+                    => out schema: {(2) default.r.r_regionkey (INT4), ?count_5 (INT8)}
+                    => in schema: {(2) default.r.r_regionkey (INT4), ?count_5 (INT8)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000007 [ROOT]
@@ -133,7 +137,7 @@
 
 SORT(8)
   => Sort Keys: default.n.n_nationkey (INT4) (asc)
-   SCAN(21) on eb_0000000000000_0000_000006
+   SCAN(22) on eb_0000000000000_0000_000006
      => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
      => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
 
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Sort_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Sort_NoBroadcast.plan
index 6509afc..d2d5617 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Sort_NoBroadcast.plan
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.Sort_NoBroadcast.plan
@@ -2,37 +2,39 @@
 -------------------------------
 SORT(8)
   => Sort Keys: default.n.n_nationkey (INT4) (asc)
-   JOIN(12)(INNER)
-     => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
-     => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
-     => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
-     => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-      SCAN(0) on default.nation as n
-        => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
-        => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-        => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-      TABLE_SUBQUERY(6) as default.t
-        => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
-        => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-        => in  schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-         GROUP_BY(4)(r_regionkey)
-           => exprs: (count())
-           => target list: default.r.r_regionkey (INT4), cnt (INT8)
-           => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
-           => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-            JOIN(11)(INNER)
-              => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
-              => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
-              => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-              => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-               SCAN(2) on default.region as r
-                 => target list: default.r.r_regionkey (INT4)
-                 => out schema: {(1) default.r.r_regionkey (INT4)}
-                 => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
-               SCAN(1) on default.nation as n
-                 => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
-                 => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-                 => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+   SELECTION(11)
+     => Search Cond: CAST (default.n.n_nationkey (INT4) AS INT8) > default.t.cnt (INT8)
+      JOIN(13)(INNER)
+        => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
+        => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
+        => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+        => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+         SCAN(0) on default.nation as n
+           => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+           => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+           => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+         TABLE_SUBQUERY(6) as default.t
+           => Targets: default.t.cnt (INT8), default.t.r_regionkey (INT4)
+           => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+           => in  schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+            GROUP_BY(4)(r_regionkey)
+              => exprs: (count())
+              => target list: default.r.r_regionkey (INT4), cnt (INT8)
+              => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
+              => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+               JOIN(12)(INNER)
+                 => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
+                 => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
+                 => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+                 => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
+                  SCAN(2) on default.region as r
+                    => target list: default.r.r_regionkey (INT4)
+                    => out schema: {(1) default.r.r_regionkey (INT4)}
+                    => in schema: {(3) default.r.r_comment (TEXT), default.r.r_name (TEXT), default.r.r_regionkey (INT4)}
+                  SCAN(1) on default.nation as n
+                    => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)
+                    => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+                    => in schema: {(4) default.n.n_comment (TEXT), default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
 explain
 -------------------------------
 -------------------------------------------------------------------------------
@@ -94,20 +96,20 @@
 [Outgoing]
 [q_0000000000000_0000] 3 => 4 (type=HASH_SHUFFLE, key=default.r.r_regionkey (INT4), num=32)
 
-GROUP_BY(16)(r_regionkey)
+GROUP_BY(17)(r_regionkey)
   => exprs: (count())
-  => target list: default.r.r_regionkey (INT4), ?count_4 (INT8)
-  => out schema:{(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+  => target list: default.r.r_regionkey (INT4), ?count_5 (INT8)
+  => out schema:{(2) default.r.r_regionkey (INT4), ?count_5 (INT8)}
   => in schema:{(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-   JOIN(11)(INNER)
+   JOIN(12)(INNER)
      => Join Cond: default.n.n_regionkey (INT4) = default.r.r_regionkey (INT4)
      => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)
      => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
      => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.r.r_regionkey (INT4)}
-      SCAN(15) on eb_0000000000000_0000_000002
+      SCAN(16) on eb_0000000000000_0000_000002
         => out schema: {(1) default.r.r_regionkey (INT4)}
         => in schema: {(1) default.r.r_regionkey (INT4)}
-      SCAN(14) on eb_0000000000000_0000_000001
+      SCAN(15) on eb_0000000000000_0000_000001
         => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
         => in schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
 
@@ -130,13 +132,13 @@
      => out schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
      => in  schema: {(2) cnt (INT8), default.r.r_regionkey (INT4)}
       GROUP_BY(4)(r_regionkey)
-        => exprs: (count(?count_4 (INT8)))
+        => exprs: (count(?count_5 (INT8)))
         => target list: default.r.r_regionkey (INT4), cnt (INT8)
         => out schema:{(2) cnt (INT8), default.r.r_regionkey (INT4)}
-        => in schema:{(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
-         SCAN(17) on eb_0000000000000_0000_000003
-           => out schema: {(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
-           => in schema: {(2) default.r.r_regionkey (INT4), ?count_4 (INT8)}
+        => in schema:{(2) default.r.r_regionkey (INT4), ?count_5 (INT8)}
+         SCAN(18) on eb_0000000000000_0000_000003
+           => out schema: {(2) default.r.r_regionkey (INT4), ?count_5 (INT8)}
+           => in schema: {(2) default.r.r_regionkey (INT4), ?count_5 (INT8)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000005 [LEAF]
@@ -161,19 +163,21 @@
 [Outgoing]
 [q_0000000000000_0000] 6 => 7 (type=RANGE_SHUFFLE, key=default.n.n_nationkey (INT4), num=32)
 
-SORT(20)
+SORT(21)
   => Sort Keys: default.n.n_nationkey (INT4) (asc)
-   JOIN(12)(INNER)
-     => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
-     => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
-     => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
-     => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-      SCAN(19) on eb_0000000000000_0000_000005
-        => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-        => in schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
-      SCAN(18) on eb_0000000000000_0000_000004
-        => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
-        => in schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+   SELECTION(11)
+     => Search Cond: CAST (default.n.n_nationkey (INT4) AS INT8) > default.t.cnt (INT8)
+      JOIN(13)(INNER)
+        => Join Cond: default.n.n_regionkey (INT4) = default.t.r_regionkey (INT4)
+        => target list: default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)
+        => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
+        => in schema: {(5) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+         SCAN(20) on eb_0000000000000_0000_000005
+           => out schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+           => in schema: {(3) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4)}
+         SCAN(19) on eb_0000000000000_0000_000004
+           => out schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
+           => in schema: {(2) default.t.cnt (INT8), default.t.r_regionkey (INT4)}
 
 =======================================================
 Block Id: eb_0000000000000_0000_000007 [ROOT]
@@ -187,7 +191,7 @@
 
 SORT(8)
   => Sort Keys: default.n.n_nationkey (INT4) (asc)
-   SCAN(21) on eb_0000000000000_0000_000006
+   SCAN(22) on eb_0000000000000_0000_000006
      => out schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
      => in schema: {(4) default.n.n_name (TEXT), default.n.n_nationkey (INT4), default.n.n_regionkey (INT4), default.t.cnt (INT8)}
 
diff --git a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.result b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.result
index f3a26c8..32d64d9 100644
--- a/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.result
+++ b/tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testThetaJoinKeyPairs.result
@@ -1,11 +1,5 @@
 n_nationkey,n_name,n_regionkey,cnt
 -------------------------------
-0,ALGERIA,0,5
-1,ARGENTINA,1,5
-2,BRAZIL,1,5
-3,CANADA,1,5
-4,EGYPT,4,5
-5,ETHIOPIA,0,5
 6,FRANCE,3,5
 7,GERMANY,3,5
 8,INDIA,2,5
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithThetaJoinConditionInWhere.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithThetaJoinConditionInWhere.Hash.plan
index a0cc8ea..20f77b3 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithThetaJoinConditionInWhere.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithThetaJoinConditionInWhere.Hash.plan
@@ -1,8 +1,8 @@
 explain
 -------------------------------
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) < default.b.c_name (TEXT)
-   JOIN(6)(LEFT_OUTER)
+   JOIN(7)(LEFT_OUTER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.c_custkey (INT4)
      => target list: default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)
      => out schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
@@ -36,9 +36,9 @@
 [Enforcers]
  0: type=Broadcast, tables=default.b
 
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) < default.b.c_name (TEXT)
-   JOIN(6)(LEFT_OUTER)
+   JOIN(7)(LEFT_OUTER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.c_custkey (INT4)
      => target list: default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)
      => out schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan
index df36af8..ac73ab9 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan
@@ -1,8 +1,8 @@
 explain
 -------------------------------
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) < default.b.c_name (TEXT)
-   JOIN(6)(LEFT_OUTER)
+   JOIN(7)(LEFT_OUTER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.c_custkey (INT4)
      => target list: default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)
      => out schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
@@ -65,17 +65,17 @@
 [q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.a.r_regionkey (INT4), num=32)
 [q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.b.c_custkey (INT4), num=32)
 
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) < default.b.c_name (TEXT)
-   JOIN(6)(LEFT_OUTER)
+   JOIN(7)(LEFT_OUTER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.c_custkey (INT4)
      => target list: default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)
      => out schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
      => in schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
-      SCAN(9) on eb_0000000000000_0000_000002
+      SCAN(10) on eb_0000000000000_0000_000002
         => out schema: {(8) default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
         => in schema: {(8) default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
-      SCAN(8) on eb_0000000000000_0000_000001
+      SCAN(9) on eb_0000000000000_0000_000001
         => out schema: {(3) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4)}
         => in schema: {(3) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4)}
 
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithThetaJoinConditionInWhere.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithThetaJoinConditionInWhere.Sort.plan
index a0cc8ea..20f77b3 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithThetaJoinConditionInWhere.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithThetaJoinConditionInWhere.Sort.plan
@@ -1,8 +1,8 @@
 explain
 -------------------------------
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) < default.b.c_name (TEXT)
-   JOIN(6)(LEFT_OUTER)
+   JOIN(7)(LEFT_OUTER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.c_custkey (INT4)
      => target list: default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)
      => out schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
@@ -36,9 +36,9 @@
 [Enforcers]
  0: type=Broadcast, tables=default.b
 
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) < default.b.c_name (TEXT)
-   JOIN(6)(LEFT_OUTER)
+   JOIN(7)(LEFT_OUTER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.c_custkey (INT4)
      => target list: default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)
      => out schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan
index df36af8..ac73ab9 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan
@@ -1,8 +1,8 @@
 explain
 -------------------------------
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) < default.b.c_name (TEXT)
-   JOIN(6)(LEFT_OUTER)
+   JOIN(7)(LEFT_OUTER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.c_custkey (INT4)
      => target list: default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)
      => out schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
@@ -65,17 +65,17 @@
 [q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.a.r_regionkey (INT4), num=32)
 [q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.b.c_custkey (INT4), num=32)
 
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) < default.b.c_name (TEXT)
-   JOIN(6)(LEFT_OUTER)
+   JOIN(7)(LEFT_OUTER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.c_custkey (INT4)
      => target list: default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)
      => out schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
      => in schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
-      SCAN(9) on eb_0000000000000_0000_000002
+      SCAN(10) on eb_0000000000000_0000_000002
         => out schema: {(8) default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
         => in schema: {(8) default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
-      SCAN(8) on eb_0000000000000_0000_000001
+      SCAN(9) on eb_0000000000000_0000_000001
         => out schema: {(3) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4)}
         => in schema: {(3) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4)}
 
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithThetaJoinConditionInWhere.Hash.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithThetaJoinConditionInWhere.Hash.plan
index 9564d93..024ebe7 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithThetaJoinConditionInWhere.Hash.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithThetaJoinConditionInWhere.Hash.plan
@@ -1,8 +1,8 @@
 explain
 -------------------------------
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) < default.b.c_name (TEXT)
-   JOIN(6)(RIGHT_OUTER)
+   JOIN(7)(RIGHT_OUTER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.c_custkey (INT4)
      => target list: default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)
      => out schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
@@ -36,9 +36,9 @@
 [Enforcers]
  0: type=Broadcast, tables=default.a
 
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) < default.b.c_name (TEXT)
-   JOIN(6)(RIGHT_OUTER)
+   JOIN(7)(RIGHT_OUTER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.c_custkey (INT4)
      => target list: default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)
      => out schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan
index 122c0b2..54c7444 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan
@@ -1,8 +1,8 @@
 explain
 -------------------------------
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) < default.b.c_name (TEXT)
-   JOIN(6)(RIGHT_OUTER)
+   JOIN(7)(RIGHT_OUTER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.c_custkey (INT4)
      => target list: default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)
      => out schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
@@ -65,17 +65,17 @@
 [q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.a.r_regionkey (INT4), num=32)
 [q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.b.c_custkey (INT4), num=32)
 
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) < default.b.c_name (TEXT)
-   JOIN(6)(RIGHT_OUTER)
+   JOIN(7)(RIGHT_OUTER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.c_custkey (INT4)
      => target list: default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)
      => out schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
      => in schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
-      SCAN(9) on eb_0000000000000_0000_000002
+      SCAN(10) on eb_0000000000000_0000_000002
         => out schema: {(8) default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
         => in schema: {(8) default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
-      SCAN(8) on eb_0000000000000_0000_000001
+      SCAN(9) on eb_0000000000000_0000_000001
         => out schema: {(3) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4)}
         => in schema: {(3) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4)}
 
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithThetaJoinConditionInWhere.Sort.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithThetaJoinConditionInWhere.Sort.plan
index 9564d93..024ebe7 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithThetaJoinConditionInWhere.Sort.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithThetaJoinConditionInWhere.Sort.plan
@@ -1,8 +1,8 @@
 explain
 -------------------------------
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) < default.b.c_name (TEXT)
-   JOIN(6)(RIGHT_OUTER)
+   JOIN(7)(RIGHT_OUTER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.c_custkey (INT4)
      => target list: default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)
      => out schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
@@ -36,9 +36,9 @@
 [Enforcers]
  0: type=Broadcast, tables=default.a
 
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) < default.b.c_name (TEXT)
-   JOIN(6)(RIGHT_OUTER)
+   JOIN(7)(RIGHT_OUTER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.c_custkey (INT4)
      => target list: default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)
      => out schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
diff --git a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan
index 122c0b2..54c7444 100644
--- a/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan
+++ b/tajo-core/src/test/resources/results/TestOuterJoinQuery/testRightOuterJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan
@@ -1,8 +1,8 @@
 explain
 -------------------------------
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) < default.b.c_name (TEXT)
-   JOIN(6)(RIGHT_OUTER)
+   JOIN(7)(RIGHT_OUTER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.c_custkey (INT4)
      => target list: default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)
      => out schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
@@ -65,17 +65,17 @@
 [q_0000000000000_0000] 1 => 3 (type=HASH_SHUFFLE, key=default.a.r_regionkey (INT4), num=32)
 [q_0000000000000_0000] 2 => 3 (type=HASH_SHUFFLE, key=default.b.c_custkey (INT4), num=32)
 
-SELECTION(3)
+SELECTION(6)
   => Search Cond: default.a.r_name (TEXT) < default.b.c_name (TEXT)
-   JOIN(6)(RIGHT_OUTER)
+   JOIN(7)(RIGHT_OUTER)
      => Join Cond: default.a.r_regionkey (INT4) = default.b.c_custkey (INT4)
      => target list: default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)
      => out schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
      => in schema: {(11) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4), default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
-      SCAN(9) on eb_0000000000000_0000_000002
+      SCAN(10) on eb_0000000000000_0000_000002
         => out schema: {(8) default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
         => in schema: {(8) default.b.c_acctbal (FLOAT8), default.b.c_address (TEXT), default.b.c_comment (TEXT), default.b.c_custkey (INT4), default.b.c_mktsegment (TEXT), default.b.c_name (TEXT), default.b.c_nationkey (INT4), default.b.c_phone (TEXT)}
-      SCAN(8) on eb_0000000000000_0000_000001
+      SCAN(9) on eb_0000000000000_0000_000001
         => out schema: {(3) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4)}
         => in schema: {(3) default.a.r_comment (TEXT), default.a.r_name (TEXT), default.a.r_regionkey (INT4)}
 
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalOptimizer.java b/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalOptimizer.java
index fc52d86..451ab5e 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalOptimizer.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalOptimizer.java
@@ -33,6 +33,7 @@
 import org.apache.tajo.plan.expr.AlgebraicUtil;
 import org.apache.tajo.plan.expr.EvalNode;
 import org.apache.tajo.plan.expr.EvalTreeUtil;
+import org.apache.tajo.plan.expr.EvalType;
 import org.apache.tajo.plan.joinorder.*;
 import org.apache.tajo.plan.logical.*;
 import org.apache.tajo.plan.rewrite.BaseLogicalPlanRewriteEngine;
@@ -253,9 +254,15 @@
     @Override
     public LogicalNode visitFilter(JoinGraphContext context, LogicalPlan plan, LogicalPlan.QueryBlock block,
                                    SelectionNode node, Stack<LogicalNode> stack) throws TajoException {
-      // all join predicate candidates must be collected before building the join tree
-      context.addCandidateJoinFilters(
-          TUtil.newList(AlgebraicUtil.toConjunctiveNormalFormArray(node.getQual())));
+      // all join predicate candidates must be collected before building the join tree except non-equality conditions
+      // TODO: non-equality conditions should also be considered as join conditions after TAJO-1554
+      List<EvalNode> candidateJoinQuals = TUtil.newList();
+      for (EvalNode eachEval : AlgebraicUtil.toConjunctiveNormalFormArray(node.getQual())) {
+        if (EvalTreeUtil.isJoinQual(eachEval, false)) {
+          candidateJoinQuals.add(eachEval);
+        }
+      }
+      context.addCandidateJoinFilters(candidateJoinQuals);
       super.visitFilter(context, plan, block, node, stack);
       return node;
     }
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
index be0cce5..7ff695b 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
@@ -347,7 +347,7 @@
   }
 
   private static boolean isJoinQualWithOnlyColumns(@Nullable LogicalPlan.QueryBlock block,
-                                            Column left, Column right) {
+                                                   Column left, Column right) {
     String leftQualifier = CatalogUtil.extractQualifier(left.getQualifiedName());
     String rightQualifier = CatalogUtil.extractQualifier(right.getQualifiedName());
 
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
index ebc35a5..4fb8aac 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
@@ -35,6 +35,7 @@
 import org.apache.tajo.exception.TajoException;
 import org.apache.tajo.exception.TajoInternalError;
 import org.apache.tajo.plan.*;
+import org.apache.tajo.plan.LogicalPlan.QueryBlock;
 import org.apache.tajo.plan.expr.*;
 import org.apache.tajo.plan.logical.*;
 import org.apache.tajo.plan.rewrite.LogicalPlanRewriteRuleContext;
@@ -46,11 +47,7 @@
 import org.apache.tajo.plan.visitor.BasicLogicalPlanVisitor;
 import org.apache.tajo.util.TUtil;
 
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Stack;
+import java.util.*;
 
 /**
  * This rule tries to push down all filter conditions into logical nodes as lower as possible.
@@ -211,7 +208,7 @@
     context.addFiltersTobePushed(notMatched);
 
     notMatched.clear();
-    context.addFiltersTobePushed(nonPushableQuals);
+    context.pushingDownFilters.addAll(nonPushableQuals);
     List<EvalNode> matched = TUtil.newList();
 
     // If the query involves a subquery, the stack can be empty.
@@ -245,9 +242,53 @@
     }
 
     context.pushingDownFilters.removeAll(matched);
+
+    // The selection node for non-equi theta join conditions should be created here
+    // to process those conditions as early as possible.
+    // This should be removed after TAJO-742.
+    if (context.pushingDownFilters.size() > 0) {
+      List<EvalNode> nonEquiThetaJoinQuals = extractNonEquiThetaJoinQuals(context.pushingDownFilters, block, joinNode);
+      if (nonEquiThetaJoinQuals.size() > 0) {
+        SelectionNode selectionNode = createSelectionParentForNonEquiThetaJoinQuals(plan, block, stack, joinNode,
+            nonEquiThetaJoinQuals);
+
+        context.pushingDownFilters.removeAll(nonEquiThetaJoinQuals);
+        return selectionNode;
+      }
+    }
+
     return joinNode;
   }
 
+  private SelectionNode createSelectionParentForNonEquiThetaJoinQuals(LogicalPlan plan,
+                                                                      QueryBlock block,
+                                                                      Stack<LogicalNode> stack,
+                                                                      JoinNode joinNode,
+                                                                      List<EvalNode> nonEquiThetaJoinQuals) {
+    SelectionNode selectionNode = plan.createNode(SelectionNode.class);
+    selectionNode.setInSchema(joinNode.getOutSchema());
+    selectionNode.setOutSchema(joinNode.getOutSchema());
+    selectionNode.setQual(AlgebraicUtil.createSingletonExprFromCNF(nonEquiThetaJoinQuals));
+    block.registerNode(selectionNode);
+
+    LogicalNode parent = stack.peek();
+    if (parent instanceof UnaryNode) {
+      ((UnaryNode) parent).setChild(selectionNode);
+    } else if (parent instanceof BinaryNode) {
+      BinaryNode binaryParent = (BinaryNode) parent;
+      if (binaryParent.getLeftChild().getPID() == joinNode.getPID()) {
+        binaryParent.setLeftChild(selectionNode);
+      } else if (binaryParent.getRightChild().getPID() == joinNode.getPID()) {
+        binaryParent.setRightChild(selectionNode);
+      }
+    } else if (parent instanceof TableSubQueryNode) {
+      ((TableSubQueryNode) parent).setSubQuery(selectionNode);
+    }
+
+    selectionNode.setChild(joinNode);
+    return selectionNode;
+  }
+
   private static Set<EvalNode> extractNonPushableJoinQuals(final LogicalPlan plan,
                                                            final LogicalPlan.QueryBlock block,
                                                            final JoinNode joinNode,
@@ -557,7 +598,7 @@
     context.setFiltersTobePushed(transformedMap.keySet());
 
     stack.push(projectionNode);
-    childNode = visit(context, plan, plan.getBlock(childNode), childNode, stack);
+    visit(context, plan, plan.getBlock(childNode), childNode, stack);
     stack.pop();
 
     // find not matched after visiting child