私は次のようなものを選びます:
SELECT
c.id AS campaign_id,
COUNT(cc.id) AS code_count
FROM
campaigns c
LEFT JOIN campaign_codes cc on cc.campaign_id = c.id
AND cc.status = 0 -- Having this clause in the WHERE, effectively makes this an INNER JOIN
WHERE c.partner_id = 4
GROUP BY c.id
AND
を移動する join句を使用すると、結合が成功または失敗し、結果の行が「右」テーブルに一致する行がない場所に保持されます。
WHERE
にあった場合 、NULL(campaign_codeがない場合)との比較は失敗し、結果から除外されます。