The way to think about it is (IMHO) this:
decltype( a->x )
keeps/retrieves the information that x
refers to a member variable, hence it gives you the declared type of the member variable. This is helpful because you couldn't extract that information if this would automatically turned into the next case:
decltype( (a->x) )
This is "just" an expression and therefore behaves like any other expression. It refers to whatever the expression returns, not what the expression references. The expression is an lvalue, it doesn't matter that it's a member variable. You explicitly throw away a part of the information that is available, expressing your intend of not being interested in what the object/member was declared as but only in the resulting type of the expression.
In other words: The first syntax gives you more information unless you explicitly decide you don't need them and use the second syntax.