What’s happening is
not @future is matching the URL note that’s the last line in your above screenshot. And then the two above lines are included in the results because when there’s a matching item it’s ancestors are always show so that the match has some context.
If you had a flat list your search would have worked well. But when the items you are notting have children removing them gets more complicated. I think what you want is something like this:
//* except (@future union @future//*)
Match everything in your outline:
Then remove everything that’s tagged with @future or that is a descendent of an item that’s tagged with future:
except (@future union @future//*)