If you want transparent pixels to not update the depth buffer, then you need to use discard in the fragment shader. This may have a performance impact on some architectures, but it's unavoidable.
...