The difference between those two commands is the quoted `*` character. If you call a command in a shell and use the `*` character for an argument, the shell itself will evaluate the argument. See this example:

    $ ls
    file1.zip  file2.zip  file3.zip  file4.txt

Now with a `*`:

    $ ls *.zip
    file1.zip  file2.zip  file3.zip

The shell evaluates the wildcard and builds a command as follows:

    $ ls file1.zip  file2.zip  file3.zip

With a quoted wildcard, it is interpreted as a file named (literally) `*.zip`:

    $ ls "*".zip
    ls: cannot access *.zip: No such file or directory

----

The `unzip` utility cannot be called with multiple zipped files as arguments. But, the developer chose another way for this. From the manpage:

> file[.zip]
> 
>  [...] Wildcard expressions are similar to
> those supported in commonly used Unix shells (sh, ksh, csh) [...]
> (**Be sure to quote any character that might otherwise be interpreted or
> modified by the operating system**, particularly under Unix and VMS.)