To me (a non-lawyer and non-legal scholar), an NDA seems more appropriately legal than a non-compete agreement, because it at least depends on enforcing a specific action rather than blanket gagging a person's ability to do an entire job where they might not necessarily disclose pertinent information.
It begs the question, where is the line between NDA and non-compete? If I have an NDA and then go to a competitor, my former employer still has a right to enforce that NDA, but how would they ever determine (prove) I violated it? I guess this difficulty is where the justification for non-compete comes in, but I think the onus should be on the employer. It's not fair to the employee if the employer can just blanket forbid them from working somewhere because they might disclose some information to their new employer in a violation of an NDA which the old employer is either too lazy or incapable to detect.
Edit: Oops, I misread NDA as Non-Disparagement instead of Non-Disclosure.
In contrast, it is extremely easy to detect a person’s employer.
I’m not saying this is a valid or correct argument, I’m saying this is one of the arguments.
Another argument (that I know less about) is that there is knowledge that is valuable and proprietary, but does not actually qualify as “trade secrets” under those laws.