Primero: No repitas la información que ya pusiste en el post anterior. Sólo suma texto sin aportar nada nuevo. Trata de poner lo relevante sin copiar y pegar.
Vamos al punto:
En primer lugar, aparentemente estas confundiendo el "sumar registros" con "sumar datos". y no es lo mismo.
UNION lo que hace es sumar
los registros obtenidos en la primera consulta a los registros obtenidos de la segunda,
pero no suma los datos. Solo encadena el primer conjunto con el segundo,
descartando todos aquellos registros donde todos y cada uno de los datos de cada una de las columnas sean exactamente iguales.
Esto último quiere decir que hace un DISTINCT para el registro entero considerado como un solo objeto.
¿Se entiende?
UNION
jamás suma datos, para eso existen las funciones agregadas, más exactamente en este caso, SUM(), que se aplica
sobre la columna a sumar.
UNION es, entonces, la representación de una operación de conjuntos (¿recuerdas Teoría de Conjuntos y diagramas de Venn?), donde es A + (B-A) = R
Ahora bien, eso sería el resultado de esto:
Pero luego estás haciendo un GROUP BY, y ese GROUP BY se ejecuta sobre la tabla resultante o derivada de ese UNION. Y es allí donde se descartan competamente los resultados de los registros de ese UNION, dejando sólo el primer registro por cada grupo indicado. Pero es allí donde debes sumarlo:
Allí sí se suma el campo "d" devuelto en el UNION.
Ahora bien, si se deben tomar todos los datos de las dos tablas unidas, sin descartar los que tienen valores iguales entre registros, lo que corresponde es usar UNION ALL, y no UNION:
Nota: Todo esto sale perfectamente explicado en el manual de referencia. Deberías usarlo.