nix develop enters a shell reconstructed from a derivation's build environment. It sources the derivation's setup, including any shellHook, using bash regardless of the user's login shell, and it does not read the user's bashrc by default. nix-shell, the older command, has the same general purpose but differs in how it computes the environment and in which attributes it honors.
The practical differences that cost time: aliases and functions from the user's shell configuration are absent, prompts look wrong, and a shellHook that assumed an interactive bash with a full rc file behaves differently. nix develop --command zsh starts the preferred shell inside the constructed environment, which recovers the interactive setup while keeping the build inputs.
mkShell is the idiomatic way to define a development environment as a flake devShells output. Its packages and nativeBuildInputs end up on PATH; inputsFrom pulls in another derivation's build inputs. A mkShell derivation cannot be built with nix build, and attempting it produces a confusing error, because it exists only to be entered.