Inner join returning more rows then exist in tables
An inner join
repeats each matching row in TableB for each row in TableA. So if there are 4 rows in TableA, and 7 in TableB, the maximum rowcount is 28.
Example at SQL Fiddle.
An inner join returns the subset of the cartesian product of the tables that satisfy the condition. So for two tables A and B with rows n and m and a condition True, the join returns nxm rows and that is the maximum.
It is incredible how simple this explanation can be if only we used the correct terminology, but it takes me much more time to understand it "the simple way" which is how it is explained on most tutorials :(.