Starting the join from invoice means that straight away any clients with no invoices are excluded. You can start from client and join onto invoice to get the information you need in the select and then use an EXISTS
clause to only grab clients with no invoice in the last x days:
SELECT MAX(invoice.created_date) 'Last Invoice Date', invoice.invoice_no 'Invoice No.', DATEDIFF(curdate(), max(invoice.created_date)) 'Days since last invoice created', client.name 'Client'
FROM client c
LEFT JOIN invoice i ON (i.client_id = c.id)
WHERE NOT EXISTS(
SELECT 1 FROM invoice i2
WHERE i2.client_id = c.id
AND DATE_SUB(NOW(), INTERVAL 42 DAY) < i2.created_date
)
GROUP BY c.id;