It seems that they do almost same type of job. So...
When should I use
esc_html() instead of
Semantically it's escape, so it's meant to be used to make output to page safe.
Semantically it's sanitize, so it's meant to be used to make input being saved safe.