What I believe he's saying is this (charlesdm correct me if I'm wrong):

- Management values Alice 100 (by values I mean - we're willing to pay at most that much to keep her)

- Management values Bob, Fob and Gob 50 each

- Bob, Fob and Gob realize Alice is more valuable, but they don't think she is 2x more valuable

If you've worked in development you likely know that difference in value of developers can be massive, but the ones with less value usually don't perceive themselves as being THAT much less valuable and would have a problem with someone they consider a peer being paid 2x their salary, that's just how things are.

If they all negotiate separately in secret, Alice can get her 100. But if salaries are public, management knows Bob, Fob and Gob will be resentful if Alice gets 100. So a new effect is introduced: the cost of giving Alice 100 is no longer simply 100, it is 100 + the cost of making Bob, Fob and Gob unsatisfied, introducing drama and perhaps them not being willing to work for 50.

So what might happen is:

- They will pay Alice 85

- They will pay Bob, Fob and Gob 55

At first glance this might seem like it doesn't make sense, and that it would be economically irrational for the employer to pay Bob, Fob and Gob more than their perceived value. But this additional 3*5 is actually the price of giving Alice more money to keep her without causing drama. Alice is still effectively costing the employer 100, it just doesn't all go to her. Alice should be rationally paid at most the amount 100-3x at which the satisfaction of the other 3 employees with their pay being 50+x instead of 50 balances out their dissatisfaction with Alice being paid more at 100-3x. Alice is basically causing the cost of other employees to grow and has to pay for this. As long as the company is paying Alice 85, the cost of a 50-employee is raised to 55, making Alice effectively cost 100 with 3 other employees.

In reality, 85 might be 90 and 55 might be 60 because the additional information the employees now have gives them a stronger overall negotiating position, so the average salary level would likely go up. But I believe Alice would still end up "subsidizing" Bob, Fob and Gob. It would be dishonest to claim that the effect I wrote in italics does not exist.

I believe the effect of public salaries, all else equal, would be to move the average a bit up, but also greatly lower the variance.

And just so that this isn't purely hypothetical: at my first job, they refused to pay me more than a certain amount because some employees who had been there much longer were being paid that amount. I was literally told this, and my boss even acted like I was somehow being a dick for not agreeing to that number and quitting over this. They had no problems giving me that number but let me quit rather than go over that number. So in reality, an even worse case happens than the one described above, because they either didn't consider the option of giving me less than I was worth and distributing the difference or they thought they couldn't afford me long-term anyway, and if they did what I described above they would just end up stuck with those raises they gave to others (these people were "lifers") after I eventually left.

So in effect, to have any chance of being paid more in line with what I was worth, I had to quit and move to a different company, even though the first company did realize my value, it is just that because of the effect I described, the cost of paying me what I was worth would have been much higher than just the amount of my salary. They acted rationally in insisting on underpaying me.

This issue doesn't exist with secret salaries.