The purpose of this component is to be able to execute the JOIN operation between two tables. Each of the two operators of this operation can be a data table of the data repository itself, or of an external data store. Its internal query optimizer can decide on the optimal execution plan to follow and apply different implementations like nested loop joins, merge joins, bind joins etc according to the statistics and available indexing. It can also rewrite the original plan to decide on an equivalent query execution plan. This will depend on the statistical information that is available for each table, and the amount of supported query processing, that can allow optimizations by pushing down operators to the storage.