If you need only the client name, it may not return the other fields. When you bring data
into the query, the same client with different dates is returned.
SELECT DISTINCT p.ID, p.Nome_Fantasia
FROM Venda v
INNER JOIN Cliente cli ON cli.ID_Pessoa = v.ID_Pessoa
INNER JOIN Pessoa p ON p.ID = cli.ID_Pessoa
WHERE Data < '2017-04-24 00:00:00.000'
ORDER BY p.ID
If you need, for example, the date of your last purchase, you can use it as follows:
SELECT DISTINCT p.ID, p.Nome_Fantasia, MAX(v.Data)
FROM Venda v
INNER JOIN Cliente cli ON cli.ID_Pessoa = v.ID_Pessoa
INNER JOIN Pessoa p ON p.ID = cli.ID_Pessoa
WHERE Data < dateadd(year, -1, convert(varchar(10), getdate(), 120))
GROUP BY p.ID, p.Nome_Fantasia
ORDER BY p.ID
This will bring the data of the user "inactive" for at least a year with the date of the last purchase.
Detail: To ensure that your query will always bring "a year back", I have changed the date to use DATEADD
.