The major difference I've found is that /d is more akin to *nix symlinks with few exceptions, and /j is an NTFS-specific, local-only, directory link. Links made with the /d option can be files or directories to local or remote file system.[1] Junction points can only point to local directories, and have a few other limitations in regards to the Windows startup process.[2] As far as I can tell, symbolic links created with mklink /d are just improved versions of NTFS junction points.
[1] http://en.wikipedia.org/wiki/Symbolic_link#Microsoft_Windows
[2] http://en.wikipedia.org/wiki/NTFS_junction_point