Yendo a tu query, el primer problema que yo le veo es lo confusa que resulta, en especial por que ni te molestas usar alias en las tablas, lo que hace una sintaxis sucia. Además tampoco lo pones en las columnas, con lo que no puedes aplicar correctamente el agrupamiento.
Yo empezaría por escribir más ordenado:
Código SQL:
Ver originalSELECT
SUM(O.MONTO) Obligaciones,
A.ALUMNO,
A.NOMBRE,
C.DESCRIPCION,
ACP.GRUPO,
O.PERIODO,
O.NUMERO_CUOTA,
CO.TIPO_CONCEPTO ,
CONVERT(VARCHAR, O.FECHA_VENCIMIENTO, 112) fecha_vendimiento,
O.INSTITUCION,
O.CANTIDAD_TOTAL
FROM
OBLIGACIONES O
INNER JOIN PERSONA P ON O.PERSONA = P.PERSONA
INNER JOIN ALUMNO A ON A.ALUMNO = P.PERSONA
INNER JOIN INSTITUCION I ON I.INSTITUCION = O.INSTITUCION
INNER JOIN CARRERA CA ON CA.CARRERA = O.CARRERA
INNER JOIN ALUMNO_CARRERA_PERIODO ACP ON ACP.ALUMNO = A.ALUMNO
INNER JOIN CONCEPTO CO ON CO.CONCEPTO = O.CONCEPTO
WHERE
(O.CANTIDAD_TOTAL IS NULL)
AND (O.FECHA_VENCIMIENTO >= '30/06/2014')
AND (O.CONCEPTO = '2621')
AND (O.INSTITUCION = '54')
GROUP BY
A.ALUMNO,
A.NOMBRE,
C.DESCRIPCION,
ACP.GRUPO,
O.PERIODO,
O.NUMERO_CUOTA,
CO.TIPO_CONCEPTO ,
CONVERT(VARCHAR, O.FECHA_VENCIMIENTO, 112),
O.INSTITUCION,
O.CANTIDAD_TOTAL
Al menos así podrías entender lo que tienes.
Finalmente, ¿en serio O.CANTIDAD_TOTAL puede ser NULL? ¿en un INNER JOIN?
¿Guardas nulos por default allí?