1. A method for query processing in a shared-nothing massively parallel processing (MPP) database system, the method comprising: receiving, at a coordinator process, a join query associated with a plurality of tables of the shared-nothing MPP database system, each of the plurality of tables being partitioned across a plurality of processing nodes of the shared-nothing MPP database system; generating, at the coordinator process, an execution plan tree for the join query, the execution plan tree comprising a top join operator and a next join operator below the top join operator; recursively executing, at each processing node of the plurality of processing nodes, the execution plan tree, the recursively executing comprising: processing, at the processing node, the next join operator to obtain first sub-tree processing results, the first sub-tree processing results produced from partitions of the plurality of tables located on the processing node; upon detecting the next join operator in the execution plan tree, forwarding, at the processing node, to the other ones of the plurality of processing nodes sub-tree for the next join operator; receiving, at the processing node, from the other ones of the plurality of processing nodes, second sub-tree processing results produced by the other ones of the plurality of processing nodes in response to the forwarded sub-tree, the second sub-tree processing results produced from partitions of the plurality of tables located on the other ones of the plurality of processing nodes; and processing, at the processing node, the top join operator using the first sub-tree processing results and the second sub-tree processing results to produce node query results; and combining, at the coordinator process, the node query results from each of the processing nodes to produce aggregated result data.