There's no definitive answer about the root causes of chain suck. Or, more precisely, the definitive answer is probably the one that says "there is more than one contributing factor".
The two obvious cases that come to mind are: 1) extremely worn chainring that "hooks" the chain, 2) new chain on an old chairing (even if the latter is not extremely worn). In the latter case the most load is transferred by the bottom teeth of the chainring greatly increasing friction at the bottom point.
But unfortunately chain suck happens even with perfectly new chainrings and chains. You can find quite a few theories floating around the Net. It is clear that chain suck is caused by excessive "friction" between the chain and the larger chairing, which prevents the chain from detaching from the larger chainring at the final phases of shifting.
As for what causes that excessive friction... There are just too many factors involved here. How clean the chainring is. How clean the chain is. How long the chainstays are (which affects the angle that the chain sweeps during the shift). How resistive your chain is to any lateral displacements. How sharp is the angle at which it bends during the shift. How well the plane of the chainring is aligned with the current cog. And so on and so forth.
You can consider yourself lucky if in your case the chain gets stuck between the chainstay and the ring. In my case it doesn't. As it wraps around the chainring, it travels all the way around to the front derailleur and slams into the derailleur cage. The derailleur gets disfigured beyond recognition.