El problema no es el EXISTS si no la forma en la que lo usas...
una alternativa podria ser esta....
comenta si te sirve, sino fuera asi, comentanos cual es el resultado que esperas obtener tal vez replanteando la consulta se podria obtener un mejor performance...
Código:
DECLARE @FechaInit datetime, @FechaEnd datetime
SET @FechaInit = convert(varchar, dateadd(yy, -4,getdate()) , 112)
SET @FechaEnd = convert (varchar, dateadd(dd,1,getdate()),112)
Select campo1
from cliente c
inner join venta v
on c.id = v.id
inner join facturas f
on c.id = v.id
and not exists(
SELECT TOP 1 v.id
FROM venta v
INNER JOIN facturas f
on v.id = f.id and v.ven_data >= @FechaInit And v.ven_data < @FechaEnd
)
Saludos!