f[x_]:= x ( -x + x^x)
now we have
FunctionDomain[ f[x], x]
(x ∈ Integers && x <= -1) || x > 0
As we can see the both solutions returned by
Solve belong to the domain of
x == 0 does not belong to the domain and so it cannot be a solution. Here the system works correctly however in a similar case it failed in a previous version and still does (at least in version 12.1), see e.g. Wrong solution to a simple equation.
As it has been observed
x == 1 is a double root. Let's assume that
x > 0 than
f[x] == 0 is equivalent to
Log[x] == x Log[x] and so
(x - 1) Log[x] == 0 and this equation has a double root at
x == 1 since $x-1=0$ and $\ln(x)=0$ for $x=1$.
Remarks above concern the case with domain specification in
Solve[ f[x] == 0, x, Reals] and
Reduce[f[x] == 0, x, Reals] however when we restrict the domain by including appropriate ranges for the variable
x both functions i.e.
Solve fail, e.g.
Solve[ f[x] == 0 && -2 <= Im[x] <= 2 && -6 < Re[x] < 6, x]
Reduce[f[x] == 0 && -2 <= Im[x] <= 2 && -6 < Re[x] < 6, x]
The correct solution
x == -1 is lost and a wrong "solution"
x == 0 is included.
This is a bug!.