FreeQ[a, _?(a < 0 &)] is a very odd expression. What exactly is that supposed to do?
a symbolic (unassigned)
a < 0 does not evaluate, and therefore it is not
TrueQ[a < 0] evaluates to
PatternTest only matches on an explicit
_?(a < 0 &) will match nothing until
a has a value. Since the pattern represents an empty set
a is free of it.
I see that you fundamentally changed the question.
As noted in the first part of my answer
PatternTest matches only on an explicitly
True return of its test function. Since
a < 0 does not evaluate it does not match.