Index: AbstractAutomaticExpressionChecker.java
===================================================================
--- AbstractAutomaticExpressionChecker.java	(revision 44206)
+++ AbstractAutomaticExpressionChecker.java	(revision 44207)
@@ -17,20 +17,29 @@
 import javax.swing.event.DocumentListener;
 import javax.swing.text.JTextComponent;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.commons.lang3.mutable.MutableObject;
+import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.Code.Caller;
+import org.gvsig.expressionevaluator.Code.Identifier;
 import org.gvsig.expressionevaluator.Expression;
 import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
 import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
 import org.gvsig.expressionevaluator.ExpressionRuntimeException;
 import org.gvsig.expressionevaluator.ExpressionSyntaxException;
+import org.gvsig.expressionevaluator.Function;
 import org.gvsig.expressionevaluator.MutableSymbolTable;
 import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig;
 import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.exception.BaseException;
 import org.gvsig.tools.i18n.I18nManager;
 import org.gvsig.tools.swing.api.ToolsSwingLocator;
 import org.gvsig.tools.swing.api.ToolsSwingManager;
 import org.gvsig.tools.swing.api.windowmanager.Dialog;
 import org.gvsig.tools.swing.api.windowmanager.WindowManager;
 import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
 
 /**
  *
@@ -173,7 +182,8 @@
             this.setMessage(JOptionPane.ERROR_MESSAGE, "Syntax error in expression");
             return;
         }
-        expression.setSQLCompatible(this.config.isSQLCompatible());
+        final Mutable<String> theTip = new MutableObject<>(null);
+        expression.setSQLCompatible(false);
         if (this.config.getPreviewSymbolTable() == null) {
             try {
                 ExpressionEvaluatorManager theManager = ExpressionEvaluatorLocator.getManager();
@@ -188,12 +198,44 @@
                 Object theValue = expression.execute(this.config.getPreviewSymbolTable());
                 this.setPreview(theValue);
             } catch (ExpressionRuntimeException ex) {
-                this.setTip(ex.getTip());
+                theTip.setValue(ex.getTip());
                 this.setMessage(JOptionPane.ERROR_MESSAGE, "Runtime error. " + ex.getMessage());
             } catch (Exception ex) {
                 this.setMessage(JOptionPane.ERROR_MESSAGE, "Runtime error. " + ex.getMessage());
             }
         }
+        if( this.config.isSQLCompatible() ) {
+            Code code = expression.getCode();
+            try {
+                code.accept(new Visitor() {
+                    @Override
+                    public void visit(Object obj) throws VisitCanceledException, BaseException {
+                        Code code = (Code) obj;
+                        switch(code.code()) {
+                            case Code.CALLER:
+                                Function function = ((Caller)code).function();
+                                if( function!=null && !function.isSQLCompatible() ) {
+                                    theTip.setValue(I18N.Avoid_the_use_of_functions_not_compatible_with_SQL_in_this_data_source(function.name()));
+                                }
+                                break;
+                            case Code.IDENTIFIER:
+                                if( config.getPreviewSymbolTable()!=null && 
+                                        !config.getPreviewSymbolTable().isSQLCompatible(((Identifier)code).name()) ) {
+                                    theTip.setValue(I18N.Avoid_the_use_of_functions_not_compatible_with_SQL_in_this_data_source(((Identifier)code).name()));
+                                }
+                                break;
+                            case Code.METHOD:
+                                theTip.setValue(I18N.Avoid_the_use_of_functions_not_compatible_with_SQL_in_this_data_source(((Caller)code).name()));
+                                break;
+                        }
+                    }
+                });
+            } catch (BaseException ex) {
+            }
+        }
+        if( !StringUtils.isBlank(theTip.getValue()) ) {
+            this.setTip(theTip.getValue());
+        }
     }
 
     protected boolean isTipEnabled() {
