Co powiesz na coś takiego:
SELECT m.MESSAGEID, sum((case when mp.messageid is not null then 1 else 0 end)) FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
GROUP BY m.MESSAGEID;
Funkcja COUNT() policzy każdy wiersz, nawet jeśli ma wartość null. Używając SUM() i CASE, możesz policzyć tylko wartości inne niż null.
EDYCJA:Prostsza wersja zaczerpnięta z górnego komentarza:
SELECT m.MESSAGEID, COUNT(mp.MESSAGEID) FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
GROUP BY m.MESSAGEID;
Mam nadzieję, że to pomoże.