In the olden days, channel 0 was your Status Window. /join 0 is called a destructive join, thus parting you from all channels. This little trick comes in very handy when, for example, you wish to tell someone to join a channel like #NoHack or #dmsetup (they help with un-hacking people). You want them to part all channels and then join the help channel. They can do this very simply by just typing /join 0,#NoHack ... and voila, they /partall and /join #NoHack, all in one command.
This is intended behavior coded into the IRCd (the server software), mIRC has nothing to do with it whatsoever.
As you noted before, you can join multiple channels in one join command by separating each channel by a comma. If one of the channels has a key, you must keep its key position the same as the join order you specify. All other channels that don't have a key can use any string that does not contain a comma or a space (essentially - it can't contain some other control characters, either, like $cr or $lf). I like to use either 0 or blank as my blank key string in a multi-channel join with a key. For example, suppose I want to join 5 channels and only the 3rd and 4th channels have a key:
/join #Channel1,#Channel2,#Channel3,#Channel4,#Channel5 blank,blank,oogabooga,boing,blank
The final blank key can, of course, be omitted.
/join #C1,#C2,#C3,#C4,#C5 0,0,oogabooga,boing
Again, this is coded into the IRCd your network uses. The number of channels you can join at one time is dependent on which IRCd (and sometimes which version of it) your server is using and the settings used to compile it (mainly, it's the maximum number of channels a user can be in - the number of channels they are currently in)...but it has nothing to do with mIRC, it's coded into the server. However, it's possible on some IRCds that users who join more than a certain number of channels in a command (or in a specific amount of time) generate global operator messages that IRCops can see and investigate; this is mainly used to detect spambots and flooders.