Como você deseja zero valores para suas linhas não correspondidas, é um trabalho para
LEFT JOIN
, Curti:SELECT
t1.*,
IF(t2.`key` IS NULL, 0, COUNT(t1.`key`)) AS t2_row_count
FROM
t1
LEFT JOIN t2
ON t1.id=t2.id
AND
t1.category=t2.category
GROUP BY
t1.`key`
Estamos contando
t1.key
porque para as linhas correspondentes elas serão iguais na primeira tabela (e não segundo) - portanto, devemos agrupar por ela - e não por campo na segunda tabela. Dica :evite nomear suas tabelas/colunas com palavras reservadas do mysql. Isso economizará muito tempo se você acidentalmente esquecer os acentos graves.