Executing `Trace` on an expression reveals what is actually happening: Trace[Remove@x; x = 1] (*{Remove[Removed[x]];Removed[x]=1,{Remove[Removed[x]],Null},{Removed[x]=1,1},1}*) "the Wolfram Language always reads in a complete input expression, and interprets the names in it, before it executes any part of the expression." (see: https://reference.wolfram.com/language/tutorial/SettingUpWolframLanguagePackages.html) The whole line is one expression with the head `CompoundExpression`. The variable `x` gets replaced with `Removed["x"]` throughout that expression. Then it seems that `Removed["x"]` is assigned the value 1 (can someone clarify what is happening here?). However, when you write it on two different lines, it is interpreted as two separate expressions and hence you don't face this problem.