1. A method of distributing across a plurality of processing nodes a database join operation between a first table having M1 rows and a second table having M2 rows, wherein said join operation involves forming M1×M2 combinations of rows from the first and second tables, the method comprising: allocating across the plurality of processing nodes the M1×M2 combinations of rows from the first and second tables, wherein each node stores a subset of said M1 rows from the first table and a subset of said M2 rows from the second table, and wherein each of said M1×M2 combinations is present on one of said nodes; performing for each processing node the join operation in respect of all combinations of rows from the subsets of rows allocated to that processing node; and collating results across all the processing nodes to complete the join operation.