Bech32 are native segwit addresses and saves the most amount of space.
P2SH-P2WPKH is a nested segwit address using P2SH. It uses a few more bytes, but enables better compatibility.
A native Bech32 segwit is better in that it saves more space by not requiring the additional scripting. However the majority of outdated/non-updated wallets will not allow you to send to a bech32 address for security as it doesn't appear to be a valid address.
P2SH-P2WPKH adds a few more bytes to the transaction, but allows full backwards compatibility with old wallets.