Not all of the reserved keywords are reserved in Firebird and not all are used (yet). However, anything new in Firebird will always use the standard name if it is available. Thus, it is an excellent precaution to avoid defining identifiers that have the potential to become reserved in Firebird's SQL. ISO Logo

The Cost of Blind Ignorance

If you decide to use potentially reserved words as identifiers for database objects, regardless of the consequences, you build a future cost into your databases: if a newer on-disk structure (ODS) version implements that word as a reserved keyword, both your databases and your applications will have to be modified in order to make your databases usable under the new server version. You will have two ways to do this, both pervasive:
  • Redefine the identifier by surrounding it with double-quotes. It then becomes case-sensitive. All references everywhere must refer to the identifier using the quoted name OR
  • Redefine the identifier by renaming it to a word that has no potential to become reserved (as should have been done originally, anyway!) So — for example — rename STATE to something like STATE0 or CNT_STATE.
Either way, you will have a lot of search-and-replace ahead of you. All dependencies on the object will have to be removed before you can perform either change. Compiled code that depends on this object (stored procedures, triggers, relational and CHECK constraints, etc.) will have to be modified in order to refer to the new object identifier. Likewise, all references to the object in application code will have to be corrected to the new situation.
This document is not about the idiosyncrasies that exist in the various keyword sets of Firebird's several versions. Always consult the Reserved Words section of the relevant release notes and/or Language Reference Update, alongside this one, to determine your complete "avoid list".

Also consider that, as long as a word was ever reserved by the standard, it has the potential to be, or to become, a reserved word in any SQL language implementation, not excluding Firebird's.
SQL-92 SQL-99 SQL-2003
ABSOLUTE ABSOLUTE  
ACTION ACTION  
ADD ADD ADD
  AFTER  
ALL ALL ALL
ALLOCATE ALLOCATE ALLOCATE
ALTER ALTER ALTER
AND AND AND
ANY ANY ANY
ARE ARE ARE
  ARRAY ARRAY
AS AS AS
ASC ASC  
  ASENSITIVE ASENSITIVE
ASSERTION ASSERTION  
  ASYMMETRIC ASYMMETRIC
AT AT AT
  ATOMIC ATOMIC
AUTHORIZATION AUTHORIZATION AUTHORIZATION
AVG    
  BEFORE  
BEGIN BEGIN BEGIN
BETWEEN BETWEEN BETWEEN
    BIGINT
  BINARY BINARY
BIT BIT  
BIT_LENGTH    
  BLOB BLOB
  BOOLEAN BOOLEAN
BOTH BOTH BOTH
  BREADTH  
BY BY BY
CALL CALL CALL
    CALLED
CASCADE CASCADE  
CASCADED CASCADED CASCADED
CASE CASE CASE
CAST CAST CAST
CATALOG CATALOG  
CHAR CHAR CHAR
CHAR_LENGTH    
CHARACTER CHARACTER CHARACTER
CHARACTER_LENGTH    
CHECK CHECK CHECK
  CLOB CLOB
CLOSE CLOSE CLOSE
COALESCE    
COLLATE COLLATE COLLATE
COLLATION COLLATION  
COLUMN COLUMN COLUMN
COMMIT COMMIT COMMIT
CONDITION CONDITION CONDITION
CONNECT CONNECT CONNECT
CONNECTION CONNECTION  
CONSTRAINT CONSTRAINT CONSTRAINT
CONSTRAINTS CONSTRAINTS  
  CONSTRUCTOR  
CONTAINS    
CONTINUE CONTINUE CONTINUE
CONVERT    
CORRESPONDING CORRESPONDING CORRESPONDING
COUNT    
CREATE CREATE CREATE
CROSS CROSS CROSS
  CUBE CUBE
CURRENT CURRENT CURRENT
CURRENT_DATE CURRENT_DATE CURRENT_DATE
  CURRENT_DEFAULT_TRANSFORM_GROUP CURRENT_DEFAULT_TRANSFORM_GROUP
CURRENT_PATH CURRENT_PATH CURRENT_PATH
  CURRENT_ROLE CURRENT_ROLE
CURRENT_TIME CURRENT_TIME CURRENT_TIME
CURRENT_TIMESTAMP CURRENT_TIMESTAMP CURRENT_TIMESTAMP
  CURRENT_TRANSFORM_GROUP_FOR_TYPE CURRENT_TRANSFORM_GROUP_FOR_TYPE
CURRENT_USER CURRENT_USER CURRENT_USER
CURSOR CURSOR CURSOR
  CYCLE CYCLE
  DATA  
DATE DATE DATE
DAY DAY DAY
DEALLOCATE DEALLOCATE DEALLOCATE
DEC DEC DEC
DECIMAL DECIMAL DECIMAL
DECLARE DECLARE DECLARE
DEFAULT DEFAULT DEFAULT
DEFERRABLE DEFERRABLE  
DEFERRED DEFERRED  
DELETE DELETE DELETE
  DEPTH  
  DEREF DEREF
DESC DESC  
DESCRIBE DESCRIBE DESCRIBE
DESCRIPTOR DESCRIPTOR  
DETERMINISTIC DETERMINISTIC DETERMINISTIC
DIAGNOSTICS DIAGNOSTICS  
DISCONNECT DISCONNECT DISCONNECT
DISTINCT DISTINCT DISTINCT
DO DO DO
DOMAIN DOMAIN  
DOUBLE DOUBLE DOUBLE
DROP DROP DROP
  DYNAMIC DYNAMIC
  EACH EACH
    ELEMENT
ELSE ELSE ELSE
ELSEIF ELSEIF ELSEIF
END END END
  EQUALS  
ESCAPE ESCAPE ESCAPE
EXCEPT EXCEPT EXCEPT
EXCEPTION EXCEPTION  
EXEC EXEC EXEC
EXECUTE EXECUTE EXECUTE
EXISTS EXISTS EXISTS
EXIT EXIT EXIT
EXTERNAL EXTERNAL EXTERNAL
EXTRACT    
FALSE FALSE FALSE
FETCH FETCH FETCH
  FILTER FILTER
FIRST FIRST  
FLOAT FLOAT FLOAT
FOR FOR FOR
FOREIGN FOREIGN FOREIGN
FOUND FOUND  
  FREE FREE
FROM FROM FROM
FULL FULL FULL
FUNCTION FUNCTION FUNCTION
  GENERAL  
GET GET GET
GLOBAL GLOBAL GLOBAL
GO GO  
GOTO GOTO  
GRANT GRANT GRANT
GROUP GROUP GROUP
  GROUPING GROUPING
HANDLER HANDLER HANDLER
HAVING HAVING HAVING
  HOLD HOLD
HOUR HOUR HOUR
IDENTITY IDENTITY IDENTITY
IF IF IF
IMMEDIATE IMMEDIATE IMMEDIATE
IN IN IN
INDICATOR INDICATOR INDICATOR
INITIALLY INITIALLY  
INNER INNER INNER
INOUT INOUT INOUT
INPUT INPUT INPUT
INSENSITIVE INSENSITIVE INSENSITIVE
INSERT INSERT INSERT
INT INT INT
INTEGER INTEGER INTEGER
INTERSECT INTERSECT INTERSECT
INTERVAL INTERVAL INTERVAL
INTO INTO INTO
IS IS IS
ISOLATION ISOLATION  
  ITERATE ITERATE
JOIN JOIN JOIN
KEY KEY  
LANGUAGE LANGUAGE LANGUAGE
  LARGE LARGE
LAST LAST  
  LATERAL LATERAL
LEADING LEADING LEADING
LEAVE LEAVE LEAVE
LEFT LEFT LEFT
LEVEL LEVEL  
LIKE LIKE LIKE
LOCAL LOCAL LOCAL
  LOCALTIME LOCALTIME
  LOCALTIMESTAMP LOCALTIMESTAMP
  LOCATOR  
LOOP LOOP LOOP
LOWER    
  MAP  
MATCH MATCH MATCH
MAX    
    MEMBER
    MERGE
  METHOD METHOD
MIN    
MINUTE MINUTE MINUTE
  MODIFIES MODIFIES
MODULE MODULE MODULE
MONTH MONTH MONTH
    MULTISET
NAMES NAMES  
NATIONAL NATIONAL NATIONAL
NATURAL NATURAL NATURAL
NCHAR NCHAR NCHAR
  NCLOB NCLOB
  NEW NEW
NEXT NEXT  
NO NO NO
  NONE NONE
NOT NOT NOT
NULL NULL NULL
NULLIF    
NUMERIC NUMERIC NUMERIC
  OBJECT  
OCTET_LENGTH    
OF OF OF
  OLD OLD
ON ON ON
ONLY ONLY ONLY
OPEN OPEN OPEN
OPTION OPTION  
OR OR OR
ORDER ORDER ORDER
  ORDINALITY  
OUT OUT OUT
OUTER OUTER OUTER
OUTPUT OUTPUT OUTPUT
  OVER OVER
OVERLAPS OVERLAPS OVERLAPS
PAD PAD  
PARAMETER PARAMETER PARAMETER
PARTIAL PARTIAL  
  PARTITION PARTITION
PATH PATH  
POSITION    
PRECISION PRECISION PRECISION
PREPARE PREPARE PREPARE
PRESERVE PRESERVE  
PRIMARY PRIMARY  
PRIOR PRIOR  
PRIVILEGES PRIVILEGES  
PROCEDURE PROCEDURE PROCEDURE
PUBLIC PUBLIC  
  RANGE RANGE
READ READ  
  READS READS
REAL REAL REAL
  RECURSIVE RECURSIVE
  REF REF
REFERENCES REFERENCES REFERENCES
  REFERENCING REFERENCING
RELATIVE RELATIVE  
  RELEASE RELEASE
REPEAT REPEAT REPEAT
RESIGNAL RESIGNAL RESIGNAL
RESTRICT RESTRICT  
  RESULT RESULT
RETURN RETURN RETURN
RETURNS RETURNS RETURNS
REVOKE REVOKE REVOKE
RIGHT RIGHT RIGHT
  ROLE  
ROLLBACK ROLLBACK ROLLBACK
  ROLLUP ROLLUP
ROUTINE ROUTINE  
  ROW ROW
ROWS ROWS ROWS
  SAVEPOINT SAVEPOINT
SCHEMA SCHEMA  
  SCOPE SCOPE
SCROLL SCROLL SCROLL
  SEARCH SEARCH
SECOND SECOND SECOND
SECTION SECTION  
SELECT SELECT SELECT
  SENSITIVE SENSITIVE
SESSION SESSION  
SESSION_USER SESSION_USER SESSION_USER
SET SET SET
  SETS  
SIGNAL SIGNAL SIGNAL
  SIMILAR SIMILAR
SIZE SIZE  
SMALLINT SMALLINT SMALLINT
SOME SOME SOME
SPACE SPACE  
SPECIFIC SPECIFIC SPECIFIC
  SPECIFICTYPE SPECIFICTYPE
SQL SQL SQL
SQLCODE    
SQLERROR    
SQLEXCEPTION SQLEXCEPTION SQLEXCEPTION
SQLSTATE SQLSTATE SQLSTATE
SQLWARNING SQLWARNING SQLWARNING
  START START
  STATE  
  STATIC STATIC
    SUBMULTISET
SUBSTRING    
SUM    
  SYMMETRIC SYMMETRIC
  SYSTEM SYSTEM
SYSTEM_USER SYSTEM_USER SYSTEM_USER
TABLE TABLE TABLE
    TABLESAMPLE
TEMPORARY TEMPORARY  
THEN THEN THEN
TIME TIME TIME
TIMESTAMP TIMESTAMP TIMESTAMP
TIMEZONE_HOUR TIMEZONE_HOUR TIMEZONE_HOUR
TIMEZONE_MINUTE TIMEZONE_MINUTE TIMEZONE_MINUTE
TO TO TO
TRAILING TRAILING TRAILING
TRANSACTION TRANSACTION  
TRANSLATE    
TRANSLATION TRANSLATION TRANSLATION
  TREAT TREAT
  TRIGGER TRIGGER
TRIM    
TRUE TRUE TRUE
  UNDER  
UNDO UNDO UNDO
UNION UNION UNION
UNIQUE UNIQUE UNIQUE
UNKNOWN UNKNOWN UNKNOWN
  UNNEST UNNEST
UNTIL UNTIL UNTIL
UPDATE UPDATE UPDATE
UPPER    
USAGE USAGE  
USER USER USER
USING USING USING
VALUE VALUE VALUE
VALUES VALUES VALUES
VARCHAR VARCHAR VARCHAR
VARYING VARYING VARYING
VIEW VIEW  
WHEN WHEN WHEN
WHENEVER WHENEVER WHENEVER
WHERE WHERE WHERE
WHILE WHILE WHILE
  WINDOW WINDOW
WITH WITH WITH
  WITHIN WITHIN
  WITHOUT WITHOUT
WORK WORK  
WRITE WRITE  
YEAR YEAR YEAR
ZONE ZONE