SQLite permite, desde su versión 3.37.0 (publicada en noviembre de 2021), añadir la palabra clave STRICT al final de una sentencia CREATE TABLE para obtener una tabla estricta. Esta característica, a menudo infravalorada, refuerza la integridad de los datos y elimina una clase habitual de errores provocados por la flexibilidad tipográfica del motor.
El problema principal que resuelven las tablas STRICT es la posibilidad de insertar o actualizar valores de un tipo distinto al declarado en la columna. Por defecto, SQLite acepta introducir texto en columnas marcadas como INTEGER, por ejemplo, lo que favorece bugs silenciosos. Con STRICT, esa operación devuelve un error explícito. Aun así, el motor sigue siendo permisivo con conversiones sin pérdida: la cadena '123' se acepta como entero porque equivale exactamente a 123.
Otra ventaja es que STRICT rechaza tipos de columna inexistentes en SQLite. Declaraciones como name GARBAGE, DATETIME, JSON, UUID o BLOBB, que normalmente se aceptan sin error, dejan de compilar, lo que detecta typos y malentendidos sobre el sistema de tipos. Los únicos tipos válidos son INT, INTEGER, REAL, TEXT, BLOB y ANY; este último conserva la flexibilidad cuando se necesita.
Entre las limitaciones destaca la imposibilidad de convertir una tabla ya existente en estricta mediante ALTER, por lo que hay que copiar los datos a una tabla nueva, lo que puede fallar si los registros contienen valores incompatibles. Tampoco es compatible con versiones anteriores a 3.37.0. El rendimiento, según pruebas del autor, no se ve afectado de forma apreciable.
El artículo contrasta esta postura con la documentación oficial de SQLite, que defiende la tipificación flexible para casos como almacenes clave-valor o importaciones de CSV. Con todo, el autor recomienda aplicar STRICT por defecto en los nuevos proyectos como una forma sencilla de mejorar la calidad del modelo de datos.
