Also in meinem kleinen Test hat das funktioniert ... ich lege aber keine Hand dafür ins Feuer das es das auch bei der echten Tabelle tut.

Code:
    SELECT
                customer_id,
                date,
                (
                    SELECT      COUNT(date)
                    FROM        invoices
                    WHERE       invoices.customer_id = contracts.customer_id
                    AND         DATE_FORMAT(invoices.date, \'%Y%m\') = DATE_FORMAT(dates.date, \'%Y%m\')
                    GROUP BY    date
                ) > 0 AS has_invoice
    FROM
                contracts
    INNER JOIN
                dates ON (
                    dates.date >= delivery_date AND (
                        termination_date IS NULL OR dates.date <= termination_date
                ))