Probably because the command cdshould be built into the shell, and not something external and executed. If an external command has changed the directory, it does not affect the parent shell. And there is no team /bin/cdor /usr/bin/cd.
I do not understand the line "If an external command changed the directory, it does not affect the parent shell."
, , fork(), exec() , . , "ls /", /bin/ls ls /. , chdir(), , . , cd, fork() exec().
, DOS .BAT cd cmd.exe. Unix - .