The punishment of social misconduct is a powerful mechanism for stabilizing high levels of cooperation among unrelated individuals. It is regularly assumed that humans have a universal disposition to punish social norm violators, which is sometimes labelled “universal structure of human morality” or “pure aversion to social betrayal”. Here we present evidence that, contrary to this hypothesis, the propensity to punish a moral norm violator varies among participants with different career trajectories. In anonymous real-life conditions, future teachers punished a talented but immoral young violinist: they voted against her in an important music competition when they had been informed of her previous blatant misconduct toward fellow violin students. In contrast, future police officers and high school students did not punish. This variation among socio-professional categories indicates that the punishment of norm violators is not entirely explained by an aversion to social betrayal. We suggest that context specificity plays an important role in normative behaviour; people seem inclined to enforce social norms only in situations that are familiar, relevant for their social category, and possibly strategically advantageous.