Ah, I see. It is good to think like that, because it gives you deeper understanding of how things work and why are they written in certain way.
The code snippet
(END)
@END
0;JMP
works for all cases. There are cases where you can skip the @END, but then your code will be more "brittle". that is, it can break if you change something unrelated, because it assumes that the value in A is the correct one. And if that happens, the behavior of your program will be quite unpredictable and hard to diagnose.
We can write this in the following way instead:
(END)
@END_INFINITE
(END_INFINITE)
0;JMP
This way we're setting A only once. And it's still just 2 instructions, because the labels aren't instructions. But then again, why would we want to optimize a NOP infinite loop?