The viewport result is what you get from compositing the render result over a checkerboard background with premultiplied/associated alpha. This is the same result you get from compositing it in Blender’s compositor or by saving as OpenEXR and compositing in external software that supports OpenEXR properly (Nuke, Fusion, Natron, etc). PNG does not support premultiplied alpha though, so it won’t handle glass reflections or transparent emission surfaces correctly.
See this thread for more info, in the linked post I also showed a workaround you can use if you really need PNG/Photoshop compatibility. If you keep scrolling there’s some good discussion on why it all works this way: Rendering an ACTUALLY transparent Glass? (Cycles)
Finally, display of alpha is broken in the render viewer due to a longstanding defect. What you see in the viewport is what you’ll get from Blender’s compositor or comping externally via OpenEXR.