Olá Flavio!
Fiz o teste aqui com o esse código que você colocou e obtive o resultado esperado, como o exercício estava pedindo, olha essa foi o meu resultado. Temos que entender o que está causando esse erro na sua máquina! Pelo que o erro nos diz, aparentemente o problema está nessa função "YEAR(NF.DATA_VENDA)" dentro do SELECT, que como não está sendo usada por nenhuma função de agregação deve está está presente dentro do nosso GROUP BY como já está "YEAR(DATA_VENDA)".
Porém o problema pode ser que o MySQL não consiga identificar que é o mesmo campo por causa da ausência do NF que é o alias da tabela, então tenta executar o SELECT dessa forma:
SELECT CONCAT('O cliente ', TC.NOME, ' faturou ',
CAST(SUM(INF.QUANTIDADE * INF.preco) AS char (20))
, ' no ano ', CAST(YEAR(NF.DATA_VENDA) AS char (20))) AS SENTENCA 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
WHERE YEAR(NF.DATA_VENDA) = 2016
GROUP BY TC.NOME, YEAR(NF.DATA_VENDA);
Se não conseguir o resultado esperado você pode tentar desabilitar o sql_mode=only_full_group_by, que é o que está causando esse erro, aqui na minha máquina quando executo o comando:
SELECT @@GLOBAL.sql_mode;
Ele retorna como resultado:
STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
Então executa esse comando select e verifica o retorno se está aparecendo também o ONLY_FULL_GROUP_BY, se estive mostrando o ONLY_FULL_GROUP_BY você pode desabilitar o mesmo dentro do sql_mode com o seguinte comando:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
E por fim executar novamente o:
SELECT CONCAT('O cliente ', TC.NOME, ' faturou ',
CAST(SUM(INF.QUANTIDADE * INF.preco) AS char (20))
, ' no ano ', CAST(YEAR(NF.DATA_VENDA) AS char (20))) AS SENTENCA 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
WHERE YEAR(NF.DATA_VENDA) = 2016
GROUP BY TC.NOME, YEAR(NF.DATA_VENDA);
Espero que tenha ajudado!