Na mesma query, adicionei um novo case para calcular o percentual de diferença e coloquei um HAVING para mostrar somente as compras inválidas - que está comentado pois meu objetivo era ver todas as compras numa mesma tabela
SELECT TC.NOME, TC.CPF, SUBSTRING(CONVERT(VARCHAR, NF.DATA , 120), 1, 7) 'ANO_MES', TC.[VOLUME DE COMPRA], SUM(INF.QUANTIDADE) 'QUANTIDADE_COMPRAS',
CASE
WHEN SUM(INF.QUANTIDADE) > TC.[VOLUME DE COMPRA] THEN 'COMPRA INVÁLIDA'
ELSE 'COMPRA VÁLIDA'
END AS STATUS_COMPRA,
CASE
WHEN SUM(INF.QUANTIDADE) > TC.[VOLUME DE COMPRA] THEN CONVERT(decimal(10,2),(SUM(INF.QUANTIDADE)/TC.[VOLUME DE COMPRA] -1)*100)
ELSE NULL
END AS PERCENTUAL_DIFERENÇA
FROM [TABELA DE CLIENTES] TC
INNER JOIN [NOTAS FISCAIS] NF
ON NF.CPF = TC.CPF
INNER JOIN [ITENS NOTAS FISCAIS] INF
ON INF.NUMERO = NF.NUMERO
GROUP BY TC.NOME, TC.CPF, SUBSTRING(CONVERT(VARCHAR, NF.DATA , 120), 1, 7), TC.[VOLUME DE COMPRA]
--HAVING SUM(INF.QUANTIDADE) > TC.[VOLUME DE COMPRA]
ORDER BY 1,3