Let's say I want to set a variable $z$ to the maximum of other variables. We'll assume that the objective function is not of help, that is, the objective function doesn't try to minimize the maximum. In my notes and on the internet, this is always achieved by using the big-M method. For example, this answer to a related question proposes the following solution for assigning to a variable the maximum of two other variables (I've changed the names of the variables for my convenience):
\begin{align} & z \ge x \\ & z \ge y\\ & z \le x + Mb\\ & z \le y + M(1-b)\\ \end{align}
$b$ here is an "auxiliary binary variable $b \in \{0,1\}$".
There is no doubt that an auxiliary variable is needed (or more than one if we want the maximum of more than two other values). My question is: is big-M really needed?
I came up with this alternative solution that doesn't use the big-M parameter:
\begin{align} & z \ge x \\ & z \ge y\\ & z \le xb + y(1-b)\\ \end{align}
Here too $b$ is forced to be $1$ if $x>y$ and $0$ if $x<y$.
Generalizing to find the maximum in a set of $n$ variables $x_1,...,x_n$, the following solution uses $n$ binary variables $b_0,...,b_n$:
\begin{align} & z \ge x_i & \forall i \in \{1,n\} \\ & \sum_1^n b_i = 1 \\ & z \le x_1b_1 + ... + x_nb_n \\ \end{align}
This is very similar to the solution usually proposed for this problem (it's also in one of the answers to the question linked above), except that it does not use the big-M method and needs $n-1$ less constraints.
So, am I missing something? Have I made a mistake? If not, why does everyone seem to use the big-M?