In my understanding, smart contracts on Cardano are always provided to the blockchain via a transaction and there is no code that is stored at the blockchain, but just a hash (the public key address). Ethereum seems to store them instead: see What is the maximum number of contracts Cardano can store?
Is this correct?
What are the other main technical differences?
Update
Also beyond that Cardano uses the eUTxO-based model and Ethereum uses an account-based model.