How to solve this tricky equation?

From the docs for Solve: "Solve gives generic solutions only." And the returned empty solution is generically correct.

From the docs for Reduce: "The result of Reduce[expr,vars] always describes exactly the same mathematical set as expr."

This is not strictly true. For instance, 1/(x/y) evaluates automatically to the generically equivalent y/x, independently of Reduce or Solve. But even inside Reduce, a similar transformation must take place in the following, since division by y is indicated in the formula which should exclude y == 0:

Reduce[1/(1 - x/y) == 0, x]
(*  y == 0 && x != 0  *)

Well, somehow FunctionDomain manages to be a bit more careful (although I don't think anything that lets 1/(x/y) evaluate can save that case).

eqn = ((1/2017)*x - a)/(x/a - 2017) == (x/a - 2017)/((1/2017)*x - a);

Reduce[eqn && FunctionDomain[eqn /. Equal -> Subtract, x], {x}]
(*  (a == -2017 && 4068289 + x != 0) || (a == 2017 && -4068289 + x != 0)  *)

FullSimplify[((1/2017)*x - a)/(x/a - 2017) == (x/a - 2017)/((1/2017)*x - a)]

yields

a == 4068289/a

Solving that yields {{a->2017},{a-> -2017}}.

Simply doing ((1/2017)*x - a)/(x/a - 2017) == (x/a - 2017)/((1/2017)*x - a) /. {{a->2017},{a-> -2017}} // FullSimplify yields {True,True}, indicating the equation is true independent of x.