La explicación a este problema exacto se encuentra en la guía de Zend:
Código SQL:
Ver originalThe most common TYPE OF JOIN IS called an INNER JOIN. It works BY returning the ROWS
FROM two TABLES IN which a common KEY expression IS satisfied BY BOTH TABLES. Here’s an
example:
SELECT *
FROM table1 INNER JOIN table2 ON table1.id = table2.id
WHEN executing this query, the DATABASE will look at the table1.id = table2.id con-
dition AND ONLY RETURN those ROWS FROM BOTH TABLES WHERE it IS satisfied.You might think
that BY changing the condition TO table1.id <> table2.id, you could find ALL the
ROWS that appear IN one TABLE but NOT the other. IN fact, this causes the DBMS TO actually
GO through each ROW OF the FIRST TABLE AND EXTRACT ALL the ROWS FROM the SECOND TABLE
WHERE the id COLUMN doesn’t have the same VALUE, AND THEN do so FOR the SECOND ROW,
AND so forth—AND you’ll END up WITH a resultset that contains every ROW IN BOTH TABLES
many times OVER.
Utiliza left join para resoverlo. Saludos