Бих избрал нещо като:
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
към клаузата за присъединяване прави свързването успешно или неуспешно, което е от решаващо значение за запазване на получените редове там, където няма съвпадащ ред в „дясната“ таблица.
Ако беше в WHERE
, сравненията с NULL (където няма код_кампания) биха се провалили и ще бъдат елиминирани от резултатите.