What is the difference between sending a transaction with no to field and create() opcode ?
Both create a contract.
An externally owned account (EOA) creates a contract by sending a transaction with no to field.
A contract (account) creates another contract by using the CREATE opcode.
It's cheaper gas-wise for a contract to create another contract, than an EOA to create a contract (TODO fill in gas costs). This question inspires Can the CALL opcode be used to create a contract?