TRUNCATE
tidak menghasilkan data rollback, yang membuatnya secepat kilat. Itu hanya membatalkan alokasi halaman data yang digunakan oleh tabel.
Namun, jika Anda sedang melakukan transaksi dan menginginkan kemampuan untuk "membatalkan" penghapusan ini, Anda perlu menggunakan DELETE FROM
, yang memberikan kemampuan untuk melakukan rollback.
EDIT: Perhatikan bahwa hal di atas tidak benar untuk SQL Server (tetapi ini berlaku untuk Oracle). Di SQL Server, dimungkinkan untuk mengembalikan operasi terpotong jika Anda berada di dalam transaksi dan transaksi belum dilakukan. Dari perspektif SQL Server, satu perbedaan utama antara DELETE FROM dan TRUNCATE adalah ini :"Pernyataan DELETE menghapus baris satu per satu dan mencatat entri dalam log transaksi untuk setiap baris yang dihapus. TRUNCATE TABLE menghapus data dengan membatalkan alokasi halaman data yang digunakan untuk menyimpan data tabel dan mencatat hanya alokasi halaman dalam log transaksi ."
Dengan kata lain, ada lebih sedikit logging selama TRUNCATE karena hanya dealokasi halaman yang dicatat dalam log transaksi, sedangkan dengan DELETE FROM setiap penghapusan baris dicatat. Itulah salah satu alasan TRUNCATE secepat kilat.
Perhatikan juga dari tautan MSDN bahwa Anda tidak dapat memotong tabel yang direferensikan oleh batasan kunci asing, berpartisipasi dalam tampilan terindeks, atau diterbitkan dengan menggunakan replikasi transaksional atau replikasi gabungan.
EDIT 2: Poin penting lainnya adalah TRUNCATE TABLE akan menyetel ulang identitas Anda ke benih awal, sedangkan DELETE FROM akan melanjutkan peningkatan dari tempat terakhirnya. Referensi:Jawaban Ben Robinson.