If John needs to send 0.1 BTC to you as payment to your product, and he wants to retain his BTC ownership confidential, and the transaction goes something like this...
1fdfsefesf..... ---> send 0.1 BTC to 1hsjhjkwa..... (your account)
---> send 999.9 BTC to 1lkskakkd... (not your account)
... then doesn't that mean John has at least 999.9 BTC left in his savings?
Even though John may not want you or anyone else to know he has that much but the transaction has just given away info of his savings.
So how can anonymity really be sure?