A distinção entre DML e DDL não é tão clara quanto seus nomes sugerem; portanto, as coisas ficam um pouco confusas às vezes.
A Oracle classificaTRUNCATE claramente como DDL no Guia de Conceitos, mas DELETEcomo DML.
Os principais pontos que colocamos TRUNCATEno campo DDL no Oracle, como eu o entendo, são:
TRUNCATEpode alterar os parâmetros de armazenamento (o NEXTparâmetro) e eles fazem parte da definição do objeto - que está no campo DDL.
TRUNCATEfaz um implícito commite não pode ser revertido (aparte o flashback) - a maioria (todas?) das operações DDL no Oracle faz isso, nenhum DML faz.
O fato de TRUNCATEnão correrON DELETE gatilhos também o diferencia das operações DML normais (mas algumas operações DML de caminho direto também ignoram os gatilhos, portanto esse não é um indicador claro).
Essa mesma documentação observa que DELETEgera UNDO, mas TRUNCATEnão gera , portanto, sua declaração está correta nesse aspecto. (Observe que TRUNCATEgera alguns REDOpara que o truncamento possa ser repetido em caso de restauração / recuperação.) Mas algunsNOLOGGING operações também podem produzir UNDO reduzido (não tenho certeza de nenhum), portanto, na minha opinião, esse também não é um indicador claro.
Então, resumiria como:
truncatenão é "transacional" no sentido de confirmar e não pode ser revertido e pode modificar os atributos de armazenamento do objeto. Portanto, não é DML comum - a Oracle classifica como DDL.
delete é uma instrução DML comum.