Both the deployments and replication controllers are used for stateless applications and not as resource intensive. Statefulsets on the other hand are used when you need to preserve the state of the application(Stateful application). To save the states stateful sets use volumeClaimTemplates/claims of persistent volumes in order to keep the state safe in case of crashes or restarts.
Basically StatefulSets are used for stateful applications where the data at any given point is important while stateless apps can be deployed using Deployments.
Further details can be found
here and
here.