Oii Júlio, como você está?
Sinto muito pela demora em obter um retorno.
Muito interessante seu questionamento. Uma das formas de obter este resultado é utilizando as cláusulas TOP WITH TIES e ROW_NUMBER(), como mostro abaixo:
SELECT TOP 1 WITH TIES TC.[NOME], NF.[CPF], INF.[NUMERO], SUM(INF.[QUANTIDADE] * INF.[PREÇO]) AS VALOR_DA_NOTA FROM [NOTAS FISCAIS] NF
INNER JOIN [ITENS NOTAS FISCAIS] INF ON NF.[NUMERO] = INF.[NUMERO]
INNER JOIN [TABELA DE CLIENTES] TC ON NF.[CPF] = TC.[CPF]
GROUP BY TC.[NOME], NF.[CPF], INF.[NUMERO]
ORDER BY ROW_NUMBER() OVER(PARTITION BY TC.[NOME] ORDER BY INF.[NUMERO] ASC)
A cláusula TOP juntamente com a WITH TIES fará com que seja retornado a primeira ocorrência de cada agrupamento e no agrupamento, estamos agrupando por linhas, fazendo com que sejam únicas através do código ROW_NUMBER() OVER(PARTITION BY TC.[NOME] ORDER BY INF.[NUMERO] ASC). A coluna que colocamos após o código partition by
irá definir como o SQL agrupa os dados, ou seja, por nome, sendo que dentro de cada grupo as linhas serão classificadas em ordem crescente, por isso do ASC. Vale ressaltar que se não utilizarmos a cláusula WITH TIES, apenas a quantidade de registros que colocarmos em TOP será retornada. Então se fosse apenas SELECT TOP 3, apenas os 3 primeiros registros apareceriam. Tudo bem?!
Agora, se executar o código, veja que será retornado apenas a primeira ocorrência do agrupamento, como mostro abaixo:
A título de curiosidade, caso queira entender mais sobre as cláusulas TOP e ROW_NUMBER, deixo abaixo o link da documentação:
Qualquer dúvida fico à disposição.
Abraços e bons estudos!