Contando el número de filas unidas en la combinación izquierda

Estoy intentando escribir una consulta agregada en SQL que devuelve el recuento de todos los registros unidos a un registro determinado en una tabla; Si no se unieron registros al registro dado, entonces el resultado para ese registro debe ser0:

Datos

Mi base de datos tiene este aspecto (no puedo cambiar la estructura, desafortunadamente):

MESSAGE
----------------------------------------------
MESSAGEID   SENDER        SUBJECT
----------------------------------------------
1           Tim           Rabbit of Caerbannog
2           Bridgekeeper  Bridge of Death

MESSAGEPART
----------------------------------------------
MESSAGEID   PARTNO        CONTENT
----------------------------------------------
1           0             (BLOB)
1           1             (BLOB)
3           0             (BLOB)

(MESSAGEPART tiene un compuestoPRIMARY KEY("MESSAGEID", "PARTNO"))

Salida deseada

Teniendo en cuenta los datos anteriores, debería obtener algo como esto:

MESSAGEID   COUNT(*)
-----------------------------------------------
1           2
2           0

Parece obvio que necesito hacer una unión izquierda en elMESSAGE mesa, pero ¿cómo puedo devolver un recuento de0 para filas donde las columnas unidas deMESSAGEPART sonNULL? He intentado lo siguiente:

Lógica

He intentado

SELECT m.MESSAGEID, COUNT(*) FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
GROUP BY m.MESSAGEID;

Sin embargo, esto devuelve

MESSAGEID   COUNT(*)
-----------------------------------------------
1           2
2           1

También he intentado

SELECT mp.MESSAGEID, COUNT(*) FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
GROUP BY mp.MESSAGEID;

pero esto vuelve

MESSAGEID   COUNT(*)
-----------------------------------------------
1           2
            1

¿Qué estoy haciendo mal aquí?

Respuestas a la pregunta(2)

Su respuesta a la pregunta